Ho il seguente script inserito in ogni pagina, per verificare se è stata fatta l'autentificazione:
Codice PHP:
if(empty($_SESSION['username']) && $_REQUEST['act'] != 'login' && $_REQUEST['act'] != 'login2') {
// Effettuo il redirect alla pagina di login
echo "
<script>
window.location = \"index.php?act=login\"
</script>";
}
ho dovuto impostare che deve effettuare il redirect se:
1) non è settata la variabile di sessione "username"
2) se non ci troviamo ne nella pagina login ne nella pagina di login2 (login2 è l'elaborazione per l'autentificazione)
Per il fatto che l'autentificazione del sito deve avvenire in ogni pagina e dunque questo codice è inserito nella index dalla quale vengono richiamate tutte le pagine.
Ora io vorrei fare in modo che dopo un tot di tempo bisogna rieffettuare il login
Quando si effettua il login viene aggiornata una cella nel db con l'ora attuale (utilizzo NOW()) chiamata "tempo". Io ora volevo inserire il codice di verifica nella funzione sopra.
Ho scritto queste 2 righe x verificare se è terminata la sessione di tempo
Codice PHP:
time() - strtotime($_REQUEST['tempo'])) >= 3600 // 3600 = 60*60 (secondi*minuti)
Dove e come dovrei inserirle nel codice x evitare il ciclo perpetuo del redirect?
xke io ho provato impostando un elseif (empty($_SESSION['tempo']) e al suo interno dopo la verifica un redirect all'act=logout.. solo che continua a rielaborare il ciclo
Vi posto anche il codice per il login e del logout
Login:
Codice PHP:
// Dopo aver verificato se l'utente e la pass sono correnti
$stato_on = "UPDATE user SET stato = '1', tempo = NOW() WHERE id = '$row[id]'"; // row si riferisce all'id dell'utente che ha effettuato il login
$result_on = mysql_query($stato_on) or die(mysql_error());
// Eseguo la query per iserire l'ora nella variabile di sessione
$tempo = "SELECT tempo FROM user WHERE id = '$row[id]'";
$result_tempo = mysql_query($tempo) or die(mysql_error());
$row_tempo = mysql_fetch_array($result_tempo);
//metto l'username nella variabile di sessione "username"
session_register("username");
session_register("permessi");
session_register("tempo");
$_SESSION['username'] = $row['nick'];
$_SESSION['permessi'] = $row['permessi'];
$_SESSION['tempo'] = $row_tempo['tempo'];
questo è il logout
Codice PHP:
// Modifico il campo "stato" nel db per far figurare l'utente offline
$stato_off = "UPDATE user SET stato = '0' WHERE nick = '$_SESSION[username]'";
echo $stato_off;
$result_off = mysql_query($stato_off) or die(mysql_error());
// Distruggo le sessioni per fare il logout
session_destroy();
session_unregister("username");
session_unregister("permessi");
session_unregister("tempo");
echo "Logout effettuato";
echo "<script>
window.location = \"index.php\"
</script>";