Php e sessioni

alexanderale

Nuovo Utente
29 Giu 2017
3
0
1
40
Ciao a tutti ragazzi,

sono nuovo del forum e nuovo nello studio del PHP. Sto seguendo dei corsi online e leggendo un buon manuale...solo che poi la mente va e...ora mi sono incasinato con un piccolo problema.
Come da titolo, le sessioni in PHP.
Non mi vergogno di dire che sto vedendo anche codici commentati sul web per darmi un'idea del "modo di programmare". Volevo provare a fare due paginette in php e html dalla grafica "agricola" per capire meglio le parti "in chiaro" dalle parti accessibili solo tramite login. E, appunto, mi sono imbattuto nelle sessioni.

Il mio "sito" (cioè le due pagine su altervista su cui sto facendo le prove) simula la composizione di un questionario di gradimento di un certo servizio. La particolarità è che la password per entrare nell'area riservata viene fornita da me (ad esempio) e la password, una volta utilizzata, non può essere più usata (filosofia della OTP)

I file sono cosi strutturati premettendo che, per il momento, mi sono bloccato non nella gestione della OTP e della sua scadenza quanto nelle sessioni del sito e nella definizione dell'area pubblica e privata. In breve:

1. Ho una pagina di index (con frasi a caso e un link che mi manda alla fase di login) nome file: index.html

HTML:
[HTML]<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="AlterVista - Editor HTML"/>
  <title></title>
</head>
<body>


Ciao!<br />
Cliccando sul link avrai la possibilità di fare un questionario <br />
Clicca sul link di seguito e fatti consegnare la password OTP<br />
<a href="main_login.html">ACCEDI AL QUESTIONARIO</a>

Attenzione: ricorda che la password vale solo per l'inserimento di 1 solo questionario, <br />
al termine del quale non è più possibile re-inserirlo <br />
</body>
</html>
[/HTML]

2. La pagina di index, tramite href, rimanda alla pagina di accesso (solo con password) nome file: main_login.html

HTML:
<HTML>
<HEAD>
<TITLE>Accesso</TITLE>
</HEAD>
<BODY>
<table border="0" cellspacing="1" cellpadding="0" width="300" align="center" bgcolor="#cccccc"><tbody>
<tr><form action="checklogin.php" method="post"> <input name="phpMyAdmin" type="hidden" value="V0N0db6Fl62QWr6eBkly75xAGn3" /><td>
<table border="0" cellspacing="1" cellpadding="3" width="100%" bgcolor="#ffffff"><tbody>
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input id="mypassword" name="mypassword" type="password" /></td>
</tr>
<tr>
<td></td>
<td></td>
<td><input name="Submit" type="submit" value="Login" /></td>
</tr>
</tbody></table>
</td>
</form></tr>
</tbody></table>
</BODY>
</HTML>

3. Nome file checklogin.php con questo file controllo se la password è presente sul DB o no

PHP:
<?php
session_start();
$host="localhost"; // Hostname
$username="nomeutentesualtervista"; // Mysql username
$password=""; // Mysql password
$db_name="my_nomeutentesualtervista"; //Nome del Database
$tbl_name="passwordOTP"; // Nome della Tabella
// Procedimento per connettersi al Database
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB"); 
// Nome utente e password inviate attraverso il form
$mypassword=$_POST['mypassword'];
$sql="SELECT * FROM $tbl_name WHERE OTP='$mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file "login_success.php"
$_SESSION['mypassword'] = $mypassword;
header("location:login_success.php");
}
else {
echo "Attenzione username o password errati";
}
?>

4. nome file login_success.php che praticamente verifica che la sessione sia attiva con la password digitata.

PHP:
<?php
session_start();

$_SESSION['mypassword'];
print_r($_SESSION);



?>

il problema è questo: se, senza loggarmi all'inizio, vado direttamente alla pagina login_success.php che dovrebbe far parte dell'area "privata" del sito (perchè ho inserito all'inizio session_star(), la pagina mi si apre lo stesso! (ovviamente mi stampa un array vuoto.)
Chi mi può aiutare a capire meglio? Non trovo soluzione.
 
ciao
nella pagina privata devi verificare che la sessione esista
PHP:
<?php
session_start();
if(!isset($_SESSION['mypassword'])){
    //la sessione NON esiste, tentativo di accesso non consentito
    //e riinvii a dove vuoi
    header('location:dove_vuoi_tu.php');
    exit();
}else{
    //la sessione esiste (log OK) quindi fai quello che devi fare
    print_r($_SESSION);
    //e tutto il resto che ti serve
}
?>
 
ciao
dimenticavo session_star() non vuol dire che sei in una pagina privata, ma è la funzione indispensabile da usare in tutte le pagine ove usi le sessioni
 
Grazie mille Borgo Italia,

effettivamente la parte che mi hai suggerito non l'avevo proprio capita durante le mie prove. Funziona tutto perfettamente e al momento del logout (ho inserito la funzione session_destroy() e il redirect tramite header ad una pagina specifica, provando a richiamare le pagine "private" mi rimanda, correttamente, ad una pagina di "alert" e di login.

Grazie ancora e...penso che tornerò a disturbarti e disturbarvi molto presto! ;-)
 

Discussioni simili