Premesso che so che l'argomento delle sessioni è trito e ritrito sono "costretto" a chiedere ulteriori chiarimenti perchè sia leggendo i vari forum, sia facendo dei test non sono riuscito a chiarirmi alcuni dubbi.
In particolare ho notato che pur settando il maxlifetime questo non funziona:
Codice PHP:
ini_set('session.gc_maxlifetime', 3);
session_start();
echo ini_get('session.gc_maxlifetime');
if(isset($_SESSION['timeout'])) echo "settata"; else echo "terminata";
$_SESSION['timeout'] = "1";
maxlifetime viene correttamente impostato a 3 secondi da come si visualizza con ini_get.
A questo punto mi aspetto che dopo 3 secondi, al refresh della pagina, la sessione sia scaduta, invece così non è.
Inoltre ho provato ad impostarla a 28800 (= 8 ore) per fare in modo che ad un utente non scada la sessione nemmeno se non effettua operazioni, ma di fatto dopo x tempo mi ritrovo con la sessione scaduta.
Alcuni nei forum sostengono poi che session_start() non riazzeri il tempo di sessione ma solo inizializzando un ulteriore variabile viene azzerato.
Dopo queste considerazioni chiedo:
1) Esiste un modo concreto e funzionante per settare il tempo di scadenza ed evitare che la sessione scada anche in caso di inattività?
2) Esiste un modo per visualizzare il tempo che manca alla scadenza della sessione?
3) Al momento utilizzo il sistema classico delle sessioni associato ad una salvataggio nel database dell'id_utente e dataora di ingresso, in modo da visualizzare chi è online (con uno scarto minimo) facendo il refresh della dataora ad ogni cambio pagina; ho letto che c'è la possibilità di utilizzare session_set_save_handler() per modificare il comportamento del salvataggio delle sessioni. Qualcuno utilizza questo metodo? Ho la possibilità di gestire meglio le sessioni? (ad esempio pensavo che potrei, anzichè verificare se la sessione è viva, verificare sul db il tempo passato)