Tutto ciò che serve è questo (utilizza jQuery per il $ .post):
JavaScript (mettere questo all'interno del vostro onload-funzione o qualcosa)
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes
refresh_session.php
<?php
session_start();
if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
$_SESSION['token'] = $_SESSION['token'];
}
?>
(so che questo è praticamente la stessa risposta accettata, volevo davvero commentare quello ma non ho ancora abbastanza reputazione.
Il più grande cambiamento è nel JavaScript, non è necessaria un'intera funzione, solo una riga.)
INFORMAZIONI SUPPLEMENTARI:
Anche se penso che sia abbastanza per chiamare solo session_start()
in php, se ho letto questo diritto (http://nl3.php.net/function.session-start):
La richiamata lettura recupererà qualsiasi dato di sessione esistente (memorizzato in un formato serializzato speciale ) e verrà non serializzato e utilizzato per autom popola regolarmente il $ _SESSION superglobale quando il callback di lettura restituisce i dati di sessione salvati alla gestione della sessione di PHP.
E durante il test ho inserito il codice precedente solo nella pagina dei visitatori e non nella pagina di amministrazione. Ma avevo entrambe le pagine aperte nello stesso browser (Chrome), e la pagina di amministrazione rimaneva loggata, almeno per più di un'ora (non ho più controllato). MA, non so se funziona ancora se si usa solo session_start()
, senza aggiornare manualmente qualsiasi sessione-var a tutti ..
Ad ogni modo, mi piace essere sicuri che le session-vars ho bisogno sono davvero ancora lì :)
Si può fare qualche chiamata Ajax? Potresti descrivere il tuo copione un po 'di più? Alcuni esempi di codice potrebbero aiutare :) – Gogol
Interessante. Ho a che fare con un problema simile ma la mia opinione in merito è che si dovrebbe evitare di reimpostare automaticamente il timeout della sessione in un intervallo in quanto creerà effettivamente una sessione infinita che persisterà fino a quando la finestra del browser sarà aperta. Invece suggerisco di aumentare la durata massima e il timeout può essere aggiornato in base all'azione dell'utente. Anche il movimento del mouse potrebbe fare il trucco, avviare un timer una volta che il mouse viene spostato. A meno che non sia incluso un componente di interazione dell'utente, crea un grande buco di sicurezza. Le sessioni sono progettate per scadere. –