Ciao a tutti,
ho un problema che non riesco a risolvere riguardo il logout dell'utente.
Vi spiego meglio come funziona lo script:
Il form per il login si trova in home, ed ha per action la stessa pagina, la quale sara' diversa se il visitatore e' loggato o meno.
Per fare questo, all' inizio della pagina controllo i dati ricevuti tramite $_POST, ed a seconda dei casi assegno differenti valori alla variabile $error.
Solo se il login e' avvenuto correttamente, creo delle variabili in $_SESSION, con i dati dell'utente, quindi se uno giunge sulla pagina per la prima volta, queste variabili non esistono.
Codice PHP:
<?php
session_start();
require 'config.php';
require 'connect.php';
$mail = htmlentities($_POST[email]);
$pwd = htmlentities($_POST[pwd]);
$error = 'empty';
if(($mail) && ($pwd == "")) {
$error = 'no_pwd';
}
elseif(($pwd) && ($mail == "")) {
$error = 'no_mail';
}
elseif(($mail) && ($pwd)) { // Solo se ci sono entrambi i dati, prelevo la mail dal DB
$log_query = "SELECT * FROM `users` WHERE `mail` = " . "'" . $mail . "'";
$log_data = mysql_query($log_query, $link);
$n = mysql_num_rows($log_data);
if($n == 0) { // Se non ci sono risultati, la mail e' errata
$error = 'mail_err';
}
else { // altrimenti prelevo il resto dei dati
$data = mysql_fetch_row($log_data);
$uid = $data[0];
$status = $data[1];
$key = $data[2];
$user = $data[4];
$user_pwd = $data[5];
if($status == 0) { // Account non ancora attivato
$error = 'no_act';
}
elseif($status == 1) { // Controllo la password, che nel DB e' criptata con md5
$pwd = md5($pwd);
if(($user_pwd == $pwd)) { // Se la password e' corretta, creo le variabili
$error = 'none';
$_SESSION['key'] = $key;
$_SESSION['mail'] = $mail;
$_SESSION['pwd'] = $pwd;
$_SESSION['user'] = $user;
}
else {
$error = 'pwd_err';
}
}
}
}
require 'header.php';
?>
Per controllare se un utente e' loggato o meno, controllo il contenuto delle variabili. Se sono vuote, non e' loggato.
Per effettuare il logout rimando alla stessa pagina, con la query string
Codice PHP:
?action=logout
e per effettuare il logout uso questo script
Codice PHP:
if($_GET['action'] == 'logout') {
$_SESSION = array();
session_destroy();
header("location: http://www.threads.altervista.org/versione?msg=Logout avvenuto con successo");
}
Quando vengo rimandato alla home, effettivamente sono sloggato, ma se cambio sito e vi ritorno, o semplicemente se clicco sul sito dalla barra dei preferiti, sono di nuovo dentro e $_SESSION ha ancora tutti i suoi valori.
Ho provato anche mettendo session_unset, settando il time del cookie a -42000, ma nulla; stesso problema.
Qualche buon' anima?