Ciaoa tutti ho un problema strano.
Con Firefox e IE se effettuo il login la prima volta mi riconosce . Esco e apparentemente tutto ok.
Rientro con lo stesso user e password diversa : mi riconosce lo stesso.
Esco e apparentemente esce.
Sembrerebbe che non mi distrugga le sessioni o non so aiutatemi. Posto il codice.
Ho un index.php (ha solo login e password ed un submit) che chiama homepage.php
Contenuto homepage.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');
?>
html....
<?php
//testare la sessione
echo @$login_err;
//Controllo che l' utente sia loggato
if(IsSet($_SESSION['logged'])){
echo "
Benvenuto utente: ".@$_SESSION['logged'][0];
echo "
Ultima Visita: ". date("d-m-Y H:i:s", @$_SESSION['logged'][1]);
}else{
echo "
Attenzione...username o password errati !";
echo "
Effettua Login";
}
?>
----Fine homepage.php
Contenuto verify.php
<?php
//Avvio o continuo la sessione
session_start();
//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[0], $row[3]);
/*Controllo che l' utente non sia già attivo
* Verifico che siano trascorsi almeno 5 minuti
* dall' ultima connessione
*/
if(fDateDiff($myArray[1], time(), 'm') <= 5){
$login_err = "La sesssione per questo utente è ";
$login_err .= "già attiva sul sito...
";
$login_err .= "Attendi 5 minuti per 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(), 'm') > 5){
$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
}
?>
---fine verify.php
file datediff.php
<?php
/**
* La funzione calcola la differenza tra due date
* in formato UNIX TimeStamp
* restituendo in output i giorni, le ore, i minuti e i secondi
* di differenza (di default, restituisce i giorni)
*/
function fDateDiff($dateFrom, $dateTo, $unit = 'd')
{
$difference = null;
$date1 = $dateFrom;
$date2 = $dateTo;
if( $date1 > $date2 ){
return null;
}
$diff = $date2 - $date1;
$days = 0;
$hours = 0;
$minutes = 0;
$seconds = 0;
if ($diff % 86400 <= 0){ // Ci sono 86400 secondi in un giorno
$days = $diff / 86400;
}
if($diff % 86400 > 0){
$rest = ($diff % 86400);
$days = ($diff - $rest) / 86400;
if($rest % 3600 > 0 ){
$rest1 = ($rest % 3600);
$hours = ($rest - $rest1) / 3600;
if( $rest1 % 60 > 0 ){
$rest2 = ($rest1 % 60);
$minutes = ($rest1 - $rest2) / 60;
$seconds = $rest2;
}else{
$minutes = $rest1 / 60;
}
}else{
$hours = $rest / 3600;
}
}
//In quel unità restituire
//la differenza ?
switch($unit){
case 'd':
case 'D':
$partialDays = 0;
$partialDays += ($seconds / 86400);
$partialDays += ($minutes / 1440);
$partialDays += ($hours / 24);
$difference = $days + $partialDays;
break;
case 'h':
case 'H':
$partialHours = 0;
$partialHours += ($seconds / 3600);
$partialHours += ($minutes / 60);
$difference = $hours + ($days * 24) + $partialHours;
break;
case 'm':
case 'M':
$partialMinutes = 0;
$partialMinutes += ($seconds / 60);
$difference = $minutes + ($days * 1440) + ($hours * 60) + $partialMinutes;
break;
case 's':
case 'S':
$difference = $seconds + ($days * 86400) + ($hours * 3600) + ($minutes * 60);
break;
case 'a':
case 'A':
$difference = array (
"days" => $days,
"hours" => $hours,
"minutes" => $minutes,
"seconds" => $seconds
);
break;
}
//Ritorno la differenza
return round($difference);
}
?> //fine
Secondo me c'è un problema nel verify ma non so cosa è?
Mi aiutate grazie !!!