- Home
- Categorie
- Coding e Sistemistica
- PHP
- problema script logout su sessioni php
-
problema script logout su sessioni php
Ciao a tutti, scusate se posto una cosa lunga ma non riesco a risolvere; io avrei un problema di login e logout:
Lo script di login e logout funzionano pero' mi succede una cosa strana:
Quando entro la prima volta e poi faccio il logout, mi reindirizza sulla pagina di login e fin qui tutto ok perchè non ha piu' le sessioni. Pero' se rimango li e ci rientro per la seconda volta e poi rifaccio il logout, stavolta va su una pagina bianca e se torno indietro mi visualizza di nuovo le pagine private pur cliccando su link privati...solo chiudendo il browser fa finire la sessione. Cioè funziona tutto solo la prima volta... E' normale?
Forse gli script comprendono cose che non servono...
Gli script sono questi:- "verify.php":
[php]
<?php
//Avvio o continuo la sessione
session_start();
require_once('datediff.php');
//Controllo che la sessione sia attiva
if(!IsSet($_SESSION['logged'])){
//Controllo se l' utente vuole loggarsi
//Recupero i valori da una Form
$username = @$_POST['txt_username'];
$password = @$_POST['txt_password'];//Controllo se l' username e la password non sono vuoti if((!strlen($username) == 0) and (!strlen($password) == 0)){ //Effettuo il controllo dei dati $strSQL = "SELECT * FROM tbl_users WHERE user_name = '".$username."'"; $strSQL .= " AND user_pass = MD5('".$password."')"; $result = mysql_query($strSQL); $row = mysql_fetch_row($result); //Controllo se l' utente e' stato trovato if(!strlen($row[0]) == 0){ /*Effettuo il Login: * Array di sessione * Contenente UserID e LastAccess */ $myArray = array($row[1], $row[3]); /* Controllo che l' utente non sia già attivo * Verifico che siano trascorsi almeno 1 secondo * dall' ultima connessione */ if(fDateDiff($myArray[1], time(), 's') <= 1){ $login_err = "La sessione per questo utente è "; $login_err .= "già attiva sul sito...<br>"; $login_err .= "Attendi 1 minuto e ripetere il Login"; }else{ //Effettuo il Login $_SESSION['logged'] = $myArray; } } //Libero la memoria mysql_free_result($result); }
}else{
//Controllo se aggiornare l' ultima data di accesso
if(fDateDiff($_SESSION['logged'][1], time(), 's') > 1){
$strSQL = "UPDATE tbl_users SET user_lastaccess = ".time();
$strSQL .= " WHERE user_id = ".$_SESSION['logged'][0];
//Aggiorno la sessione
$_SESSION['logged'][1] = time();
mysql_query($strSQL);
}
}
if(@$_GET['logout'] == 1){ //Effettuo il Logout/*
$_SESSION = array(); //Desetto tutte le variabili di sessione
session_destroy(); //Distruggo le sessioni
*/}
?>
[/php]- login.php:
[php]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>LOGIN</title>
</head>
<link rel=stylesheet href="style9.css" type="text/css">
<body>
<?php
echo "ciao: ".@$_SESSION['logged'][0];
?>
<form method="post" action="homepage.php">
Username: <input type="text" name="txt_username">
<p>
Password: <input type="password" name="txt_password">
<p>
<input type="submit" value="login">
</form>
</body>
</html>
[/php]- homepage.php:
[php]
<?php//Includo i file per la connessione
//e per la verifica Utente
require_once('db_conn.php');
require_once('datediff.php');
require_once('verify.php');?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>area privata</title>
</head>
<link rel=stylesheet href="style3.css" type="text/css">
<body>
<?php
//testare la sessione
echo @$login_err;
//Controllo che l' utente sia loggato
if(IsSet($_SESSION['logged'])){
echo "solo il webmaster puo' vedere questo"."<br>";
echo "<p>Benvenuto utente: ".@$_SESSION['logged'][0];
//echo "<br>Ultima Visita: ". date("d-m-Y H:i:s", @$_SESSION['logged'][1]);?> <br> Pannello di controllo <link rel=stylesheet href="style3.css" type="text/css"> <p class="posizione1"> <a href="iscrizioni.php">verifica iscrizioni</a><br> <a href="invio_comunicazioni.php">invia comunicazioni</a><br> <a href="homepage_prova.php">Esci</a> </p> <?php
}else
echo "<p>Non sei autenticato !"."<br><a href='login.php'>login</a>"."<br>";
?>
</body>
</html>
[/php]- homepage_prova.php:
[php]
<?php
require_once('verify.php');//AZZERAMENTO E RIGENERAZIONE
session_start();
$_SESSION = array();
session_regenerate_id();
header("Location: mio_sito/login.php");
exit;
?>
[/php]Non so come risolvere la cosa. La prima volta che entro funziona tutto e mi reindirizza sulla pagina di login cancellando le sessioni. Ma se ci rientro e poi faccio di nuovo il logout mi reindirizza in una pagina bianca e non mi cancella le sessioni.
Grazie.