Qualcuno sarebbe così gentile da spiegarmi qual'è lo script base per aprire e chiudere una sessione, in seguito a login, avendo una struttura ad inclusione, nel senso che dentro index vengono caricate tutta le altre pagine?
Grazie.
![]()
Qualcuno sarebbe così gentile da spiegarmi qual'è lo script base per aprire e chiudere una sessione, in seguito a login, avendo una struttura ad inclusione, nel senso che dentro index vengono caricate tutta le altre pagine?
Grazie.
![]()
Una guida la trovi su questo sito sotto: http://freephp.html.it/guide/lezione.asp?id=196
Cmq per aprire una sessione si utilizza:
e va messo in testa alla pagina e prima di ogni output html generato dallo script e prima di ogni include(); per creare una variabile di sessione basta fare:Codice PHP:
session_start();
come una normale variabile. Da quel momento in poi la variabile resta presente nello script fino a quano non la distruggi. Per distruggere:Codice PHP:
$_SESSION['nome'] = 'qualsiasi_valore';
Codice PHP:
// Desetta tutte le variabili di sessione.
session_unset();
// Infine , distrugge la sessione.
session_destroy();
grazie marco,
il mio problema è che la pagina che non è protetta nel senso che o la vede o no, ma nel senso che se la sessione è attiva il form è editabile, altrimenti mostra solo i risultati della query.
Tale pagina è inclusa con questo script in index.php:
per cui session_start() la metto solo nell'indexcodice:$p="main"; //pagina passata via parametro if(isset($_GET['page'])){ $p=$_GET['page']; if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php")){ //pagina di errore $p="error"; } } include($p.".php");
dove per altro includo il modulo di login:
Nell'index inoltre in testa a tutto mettocodice:if($_POST["Submit"] == "Logout"){ $_SESSION=array(); session_destroy(); header("Location: index.php?page=$page"); }else{ if($_POST["Submit"] == "Login"){ if($_POST['username'] != '' && $_POST['password'] != ''){ $username = $_POST["username"]; $password = md5($_POST["password"]); $query = "SELECT * FROM tab WHERE username = '$username' AND pass = '$password'"; $result = mysql_query($query); if(!$result || mysql_num_rows($result) == 0){ echo "Username sconosciuto o Password errata"; }else{ $_SESSION['user'] = $username; } }else{ echo "Devi inserire username e password"; } } } if(!isset($_SESSION['user'])){ ?> <form name="formadmin" method="post" action="<?="index.php?page=$page";?>"> username: <input type="text" name="username" size="12"> password:_<input type="password" name="password" size="12"> <input type="submit" name="Submit" value="Login"> </form> <? }else{ ?> <form name="formadmin" method="post" action="<?="index.php?page=$page";?>"> Benvenuto <?= ucfirst($_SESSION['user'])."...";?> per uscire clicca <input type="submit" name="Submit" value="Logout"> </form> <? } ?>
ob_start();
ed, alla fine,
ob_end_flush();
Mentre la pagina richiesta ha semplicemente 2 funzioni ed una prevede:
codice:if(!isset($_SESSION['user'])){ echo "contenutopagweb"; }else{ echo "form editabile"; }
il problema è che una volta loggato non mi più mostra le pagine incluse.
In cosa sbaglio?
quando includi i file usa require() al posto di include() almeno ti esce a video l'errore. Prova!
niente, non esce alcun errore....
ho trascurato di dirti che in locale (unix) funziona bene...
è sul web (win) che non và....
potrei aggirare l'ostacolo eliminando le sessioni, ma in questo modo l'utente dovrà riconnettersi ad ogni aggiornamento....
marco perdonami, oltre ad aver perso una giornata intera io ho fatto perdere del tempo anche a te e ad altri...
Lo script funziona è il css che è stato generato, evidentemente, solo per essere visualizzato dai pc....
...il mio mac lo visualizza sballatissimo, mettendomi il risultato in un posto che per scovarlo devo scorrere x tre ore entrambe le barre del browser...
![]()
Scusa ancora e grazie per l'impeccabile spiegazione sulle sessioni.
![]()
marco scusa,
ho ancora un problema
dopo aver eseguito il logout, termina la sessione e viene visualizzata la pagina web correttamente, ma se premo un qualunque pulsante dal menù, apre la pagina in modalità login. a cosa potrebbe essere dovuto?
mmm non saprei sinceramente...non sono espertissimo..pero' potresti provare a mettere in testa un header() per ricaricare lapagina dove aver fatto il logout.Cosi' facendo se nn sbaglio sarebbbe come fare un refresh e perdere i dati.
In testa alla pagina prima di tutto fai(prova):
Prova ma n saprei..ciao!Codice PHP:
if(logout e' stato premuto(non so come lo verifichi)){
header("Location: [url]http://www.pagina.php/[/url]");
}
è nello script sopra, cmq lo riporto
if($_POST["Submit"] == "Logout"){
$_SESSION=array();
session_destroy();
header("Location: index.php?page=$page");
}else{
if($_POST["Submit"] == "Login"){
...
}
}
<form name="formadmin" method="post" action="<?="index.php?page=$page";?>">
Benvenuto <?= ucfirst($_SESSION['user'])."...";?> per uscire clicca
<input type="submit" name="Submit" value="Logout">
</form>
anche se visto che ho fatto il form non ha senso avere l'header.
ho provato anche con un semplice link, senza form, ma dà lo stesso problema.