Controllo scadenza sessioni

GoldenDragon

Nuovo Utente
22 Giu 2015
8
0
0
Buongiorno.
Ho cercato in lungo e in largo sul web, ma non ho ancora capito come si possa controllare se una sessione php è scaduta.
Inizialmente immaginavo che facesse testo il valore session.gc_maxlifetime del php.ini, dunque lo ho settato a 60 secondi e ho provato a fare un login. Ho lasciato la pagina "a riposo" per una decina di minuti (giusto per essere sicuri), poi ho ricaricato la pagina e tutto funzionava ancora...

Quindi ho pensato di inserire un periodo di tempo nel record della sessione nel db, periodo dopo il quale la sessione è considerata scaduta. Quindi con un controllo del tipo

PHP:
/*Recupero data di creazione e durata della sessione dal db e le metto in $start e $expire. Ometto per brevità*/
if($start+$expire <= time())   //$start è un timestamp e $expire è espresso in secondi
  die( "Sessione scaduta" );
else
  /*Vai avanti con il caricamento della pagina*/

posto all'inizio di ogni pagina controllo se la sessione è ancora attiva o meno e mi regolo di conseguenza. Qui però sorge il problema di continuare ad aumentare il valore in $expire fintanto che l'utente interagisce con la pagina, altrimenti dopo esattamente $expire secondi la sessione scade e l'utente è costretto a riloggarsi.

Cosa mi sfugge? Come posso fare?
 
Buongiorno.
Ho cercato in lungo e in largo sul web, ma non ho ancora capito come si possa controllare se una sessione php è scaduta.
Inizialmente immaginavo che facesse testo il valore session.gc_maxlifetime del php.ini, dunque lo ho settato a 60 secondi e ho provato a fare un login. Ho lasciato la pagina "a riposo" per una decina di minuti (giusto per essere sicuri), poi ho ricaricato la pagina e tutto funzionava ancora...

Quindi ho pensato di inserire un periodo di tempo nel record della sessione nel db, periodo dopo il quale la sessione è considerata scaduta. Quindi con un controllo del tipo

PHP:
/*Recupero data di creazione e durata della sessione dal db e le metto in $start e $expire. Ometto per brevità*/
if($start+$expire <= time())   //$start è un timestamp e $expire è espresso in secondi
  die( "Sessione scaduta" );
else
  /*Vai avanti con il caricamento della pagina*/

posto all'inizio di ogni pagina controllo se la sessione è ancora attiva o meno e mi regolo di conseguenza. Qui però sorge il problema di continuare ad aumentare il valore in $expire fintanto che l'utente interagisce con la pagina, altrimenti dopo esattamente $expire secondi la sessione scade e l'utente è costretto a riloggarsi.

Cosa mi sfugge? Come posso fare?

1) Nel db potresti inserire un campo "refresh" che aggiorni ogni tot tempo via ajax, utilizzando javascript puoi far si che la chiamata ajax avvenga solo se l'utente è attivo sulla pagina. Poi ogni tot tempo, sempre via ajax, controlli tutte le sessioni scadute e reindirizzi alla pagina di logout.

2) Senza toccare il db, cerchi di gestire tutto via javascript, se scade il tempo prestabilito reindirizzi al logout.

Scusa per la spiegazione grossolana, ma è giusto per darti un'idea generale.
 
Mmh, penso di aver capito. Grazie.
Mi domandavo, però, perchè non esista una funzione is_session_expired(), dato che comunque le sessioni hanno una loro durata indicata nei file .ini

AGGIORNAMENTO
Andando avanti nello sviluppo ho scoperto che se faccio ini_get("session.gc_maxlifetime") ottengo 1440 invece di 60 (come avevo impostato manualmente nel file php.ini). Questo spiega molte cose e penso che potrei tornare al "piano A", cioè mostrare la pagina di logout quando $_SESSION["elemento qualunque"] == null.

PS: sto usando xampp
 
Ultima modifica:

Discussioni simili