PDA

View Full Version : Sessioni PHP Aggirate


Pingus
31-03-2004, 11:29
Ciao a tutti...sto lavorando con le sessioni in php e ho bosogno di un chiarimento:

Ho strutturato le mie pagine nel seguente modo:
----------------------------------------------------
1)MAIN.INC
<? include("head.inc"); ?>
<table>
<tr>
<td width=21% height=2%></td>
<td width=79% height=2%></td>
</tr>
<tr>
<td> <? include("Menu.inc"); ?> </td>
<td> <? print $content ?> </td>
</tr>
<tr>
<td width=21% height=5%></td>
<td width=79% height=5%>
<? include("..\Generale\FondoPagina.inc"); ?>
</td>
</tr>
</table>
</body>
</html>
----------------------------------------------------
2)HEAD.INC

<html>

<head>
<title>Stefano's Pages</title>
</head>

<body bgcolor=#f2f5f9>
----------------------------------------------------
3)FONDOPAGIN.INC

<b>Ciao a tutti</b>
----------------------------------------------------
4)PAGINA000.PHP (vi arrivo dalla HOME.PHP)

if (isset($_POST['SubmitLoginDitte'])):
// il pulsante di submit è quello
// della pagina dove immetto password e userid

include("..\Generale\VerificaLogin.inc");
//qua c’è la procedura per il controllo login

if (!Login($_POST['UserID'],$_POST['Psswd'])):
//se il login è errato
$_SESSION = array();
session_destroy();
header("Location: $redirezione");
// lo ridireziono alla pagin principale
else:
$_SESSION['Utente']= $_POST['UserID'];
//se il login ècorretto setto la sessione
endif;

$content = “
<b>BENVENUTO<b>
<a href =HOME.PHP?uscita=1>LOGOUT</a>
<a href =PAGINA111.PHP>VAI AllA PAGINA DI
ADMINISTRATOR<a>

//content non è altro che una stringa
//che verrà stampata nel file main.inc

else:
//se non arrivo dalla pagina di login c’è stato un errore
//e distruggo la sessione
$_SESSION = array();
session_destroy();

header("Location: $redirezione");
endif;

include("..\Generale\main.inc"); //includo il file main
?>
----------------------------------------------------
5)PAGINA111.PHP

if (isset($_SESSION['Utente'])): //se la sessione è impostata

$content = “
<b>BENVENUTO<b><a href =HOME.PHP?uscita=1>LOGOUT</a>
-----------ALTRE OPERAZIONI SUL DB------------

else:

//lo rimando ll pagina di llogin segnalando errore

endif;
----------------------------------------------------


Una volta fatto il login correttamente, viene settata la variabile di sessione relativa all’utente.
L’utente puo fare il logout o entrare in un’altra pagina (PAGINA111.PHP)…da questa puo fare il logout oppure effetture operazioni sul db.
Se faccio il logout dalla pagina PAGINA111.PHP , vengo redirezionato alla HOME.PHP passandogli la variabile
Uscita=1 che fa si che venga distrutta la sessione (faccio io le operazioni di distruzione $_SESSION = array();
session_destroy(); )…..se io richiamo direttamente la pagina PAGINA111.PHP senza fare il giro corretto ottengo l’errore e sono rimandato ll pagina di login (come definito nel ramo else) e tutto funziona……il problema ce l’ho quando faccio LOGOUT (distruggo la sessione) e poi premo il tsto BACK di INTERNET_EXPLORER…infatti mi avvisa che la pagina è scaduta, ma mi basta fare REFRESH per ritrovarmi PAGINA111.PHP con l sessione ancora attiva (infatti riesco a leggere il valore inpostto sulla sessione e mi permette di fare tutte le cose che solo dopo essere entrato posso fare)……Come posso risolvere questo problema di refresh del browser? Come mai nonostante distrugga la sessione, il browser la ritrova? Sbaglio qualcosa? Mi scordo di fare qualche operazione? Vi prego, ormai sono settimane che tento di risolverlo senza riuscirci!!!

texerasmo
31-03-2004, 12:48
nella pagina di logout scrivi..

session_unset();
session_destroy();
a me funziona correttamente :)

Pingus
01-04-2004, 11:19
Ho fatto come dici ma il problema rimane...ho visto che quando accedo come amnistratore mi viene creato un file (il file della sessione) dentro c:\PHP\Sessiondata....facendo il loguot questo file mi viene cancellato...pero se faccio BACK BACK e REFRESH (dal browser), mi viene ripristinato (o ricreato) un file ientico a quello che c'era prima dentro c:\PHP\Sessiondta e in questo modo è come se l'amministratore fosse sempre collegato e quindi chiunque abbia fatto queste operazioni lvora come admin!!!!