ciao a tutti nel sito che ho sul server di "Aruba" se non interagisco per pochi minuti mi cade la sessione e mi tocca rifare il login, c'è un modo per prolungare il tempo di questa sessione?
ciao a tutti nel sito che ho sul server di "Aruba" se non interagisco per pochi minuti mi cade la sessione e mi tocca rifare il login, c'è un modo per prolungare il tempo di questa sessione?
Ti suggerisco di iniziare leggendo il manuale ufficiale:
http://www.php.net/session_set_cookie_params
http://www.php.net/manual/en/session...gc-probability
http://www.php.net/manual/en/session...ion.gc-divisor
http://www.php.net/manual/en/session...gc-maxlifetime
ho messo questo prima di session_start ma pare che non funzioni, dopo 10 minuti scade lo stesso, e io l'avevo settato a 5 ore!
<?
session_set_cookie_params(60*300);
session_start();
?>
vedi se puoi settare con ini.set il maxlifetime (l'ultimo link che ti ha dato filippo).
Se non puoi settare in nessun modo quei valori, anche se non è una soluzione proprio pulita puoi mettere nell'onload della pagina una funzione javascript che venga eseguita ogni 9 minuti, e che chiami via ajax una pagina php che lancia semplicemente un session_start().session.gc_maxlifetime specifies the number of seconds after which data will be seen as 'garbage' and cleaned up. Garbage collection occurs during session start.
![]()
Ma in quale occasione session_set_cookie_params funziona?Originariamente inviato da gianiaz
vedi se puoi settare con ini.set il maxlifetime (l'ultimo link che ti ha dato filippo).
Se non puoi settare in nessun modo quei valori, anche se non è una soluzione proprio pulita puoi mettere nell'onload della pagina una funzione javascript che venga eseguita ogni 9 minuti, e che chiami via ajax una pagina php che lancia semplicemente un session_start().
![]()
Il mio sito non'è il localhost ma si trova su un server a pagamento, maxlifetime va bene anche se non'è in localhost?
bhe non c'è differenza tra localhost e server online, i parametri sono sempre gli stessi, il problema potrebbe essere che il php sia configurato in modo da non permetterti di modificare questi valori.
Il funzionamento della sessione dipende da tutti i parametri che ti ha fornito filippo.
In questo caso, se tu fai "vivere" per un maggior tempo il cookie contenente l'id di sessione, ma poi il maxlifetime ha un tempo di durata minore, quando viene fornito l'id di sessione tramite il cookie il server non lo trova e fa partire una nuova sessione con l'id che hai fornito.
Viceversa se la sessione vive a lungo, ma tu non sei più in grado di fornire l'id perchè il cookie è scaduto ti ritrovi con una nuova sessione con id diverso.
Gli altri 2 parametri che ti ha fornito filippo invece servono al server per decidere ogni quanto cancellare il garbage collector delle sessioni.
Infatti dietro al meccanismo di cancellazione c'è tutto un discorso di probabilità, se tu metti che la scadenza della sessione è di 30 minuti, non è detto che al 30 minuto e un secondo non la trovi più, perchè magari il calcolo probabilistico che c'è dietro non fa scattare al 30 minuto la cancellazione della sessione.
Diciamo che se setti un valore alto nei 2 parametri maxlifetime e session_set_cookie_params sei sicuro che in quel tempo la sessione non scada.
Ciao
Per quel poco che ho capito (sono uno sviluppatore autodidatta di basso livello), ti posso dire che io i cookie non li uso, o forse li usa Aruba per la sessione, non lo so.
Per il discorso del maxlifetime mi dici che devo settare ini.set ma il sito stando su Aruba non credo possa farlo.
Non saprei come risolvere il problema.
Quando salvi in sessione un dato, viene messo in un array ($_SESSION), quest'array viene serializzato (se vuoi guarda la funzione serialize()), e scritto in un file sul server, dandogli come nome l'id della sessione.
A questo punto ogni volta che tu lanci il session_start viene letto e unserializzato il file con nome = all'id di sessione che fornisce il browser.
L'id di sessione può essere fornito dal browser in diversi modi a seconda di come è configurato il server (in genere tramite GET o cookie), qui sul forum di html in tutti e due i modi (non so perchè).
Tutti questi passaggi che ti ho descritto avvengono in automatico, e non sei tu a creare il cookie, ma direttamente il meccanismo che sta dietro alla configurazione del server.
Tornando al tuo problema, dovresti provare a mettere all'inizio dei tuoi files php questa istruzione :
E poi vedi cosa succede, non è detto che ti sia permesso modificare questo valore, che comunque io sul server che hai menzionato non ho mai trovato a 10 minuti.codice:ini_set('session.gc_maxlifetime', '1440'); // sono secondi, quindi 24 minuti
Se non puoi settare questi valori la via alternativa è quella che ti dicevo riguardo a una chiamata ajax periodica, che non fa altro che rinnovare il tempo di inizio della sessione, in modo da far ripartire il contatore.
Ciao
ok grazie delle delucidazioni, ora provo.![]()
ha funzionato
<?
ini_set('session.gc_maxlifetime', '1440');
session_set_cookie_params(60*300);
session_start();
?>
l'ho provato con entrambe le istruzioni