Perché session.cookie_lifetime è impostato su 23 giorni? [chiuso]


9

Per quanto ho capito, la durata della sessione di Drupal è limitata, in quanto l' session.gc_maxlifetimeimpostazione predefinita è di circa 2,3 giorni.

Allora a che cosa serve session.cookie_lifetimeessere impostato su 23 giorni?

Ecco lo snippet di settings.php:

/**
 * Set session lifetime (in seconds), i.e. the time from the user's last visit
 * to the active session may be deleted by the session garbage collector. When
 * a session is deleted, authenticated users are logged out, and the contents
 * of the user's $_SESSION variable is discarded.
 */
ini_set('session.gc_maxlifetime', 200000);

/**
 * Set session cookie lifetime (in seconds), i.e. the time from the session is
 * created to the cookie expires, i.e. when the browser is expected to discard
 * the cookie. The value 0 means "until the browser is closed".
 */
ini_set('session.cookie_lifetime', 2000000);

Supponiamo che io abbia impostato entrambi session.gc_probabilitye session.gc_divisor su 1 solo per il bene di questa domanda.


Perché non vuoi che un biscotto scompaia misteriosamente? Vuoi che sia lì in modo che la sessione possa essere invalidata con garbo? Questo sta causando qualche problema reale per te?
Mołot,

Questo è tutto. Ma non sarebbe una buona idea far scadere i cookie ad esempio 40 ore e la sessione del server a 51 ore? Intendo che la durata dei cookie è inferiore al tempo di scadenza del server.
user5858

Questo è in gran parte basato sull'opinione e solo gli autori di PHP possono davvero dirlo. Oh, e dipende dal gestore della sessione che hai deciso di utilizzare. Ma di solito no, non vuoi una sessione che dovrebbe essere attiva e utilizzabile per altre X ore senza che nessuno la usi a causa della mancanza di cookie. È uno spreco di spazio. Lasciare i cookie più a lungo significa che quasi sempre c'è qualcuno che può utilizzare i dati di sessione conservati sul server, quindi nessun dato di sessione conservato è uno spreco.
Mołot,

Risposte:


16

ini_set ('session.gc_maxlifetime', 200000);

  1. Questo valore è per il server.
  2. È un'impostazione per Session Garbage Collection.
  3. Se l'ultima visita degli utenti è avvenuta prima dei 200000, questa sessione è idonea per la garbage collection.
  4. Dal momento che è GC, il valore della sessione può essere scartato e non obbligatorio. Se un'azione GC si verifica dopo che la sessione è stata resa idonea per il GC, verrà eliminata.
ini_set('session.cookie_lifetime', 2000000);
  1. Questo valore è per il browser.

  2. Questo è il tempo massimo assoluto fino al quale un browser può mantenere attivo questo cookie.

  3. Un valore 0 qui significa immediato o quando il browser è chiuso.

Per rispondere alla tua domanda in particolare.

  1. Se l'utente non risponde al server entro 2,3 giorni, la sua sessione verrà eliminata quando viene eseguita la garbage collection della sessione.
  2. Se continua a colpire una pagina sul server ogni 2,2 (meno di 2,3 giorni), la sua sessione rimarrà attiva. Ma può essere attivo solo fino a 23 giorni dal momento della prima generazione della sessione.
  3. Ciò significa che session.cookie_lifetimeè la durata massima assoluta di una sessione.

1
Notare il probabilistic garbage collector. Maggiori dettagli: stackoverflow.com/a/1270960 .
digitgopher

Grande risposta, può anche essere fatto in php.ini se si ha accesso a quella sul server ad esempio in /etc/php/5.6/fpm/php.iniregolare (o aggiungere) impostazione: session.gc_maxlifetime = 2000000. Grazie.
therobyouknow,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.