Warum ist session.cookie_lifetime auf 23 Tage festgelegt? [geschlossen]

9

Soweit ich weiß, ist die Sitzungslebensdauer bei Drupal begrenzt, da die session.gc_maxlifetimeEinstellung standardmäßig auf etwa 2,3 Tage festgelegt ist.

Was nützt session.cookie_lifetimees dann, auf 23 Tage eingestellt zu sein?

Hier ist der Ausschnitt aus 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);

Bitte nehmen Sie an, dass ich beide session.gc_probabilityund session.gc_divisor nur wegen dieser Frage auf 1 gesetzt habe .

user5858
quelle
Weil Sie nicht möchten, dass ein Cookie auf mysteriöse Weise verschwindet? Sie möchten, dass es dort ist, damit die Sitzung ordnungsgemäß ungültig gemacht werden kann? Verursacht dies ein tatsächliches Problem für Sie?
Mołot
Das war's dann. Aber wäre es nicht eine bessere Idee, Cookies nach etwa 40 Stunden und Server-Sitzungen nach 51 Stunden ablaufen zu lassen? Ich meine, die Lebensdauer von Cookies ist kürzer als die Ablaufzeit des Servers.
user5858
Dies ist größtenteils meinungsbasiert und nur PHP-Autoren können es wirklich sagen. Oh, und es hängt vom Session-Handler ab, für den Sie sich entschieden haben. Aber normalerweise nein, Sie möchten keine Sitzung, die für weitere X Stunden aktiv und verwendbar sein soll, ohne dass jemand sie aufgrund fehlender Cookies verwenden kann. Es ist eine Verschwendung von Speicher. Ein längeres Verlassen des Cookies bedeutet, dass fast immer jemand Sitzungsdaten verwenden kann, die auf dem Server gespeichert sind. Daher sind keine gespeicherten Sitzungsdaten eine Verschwendung.
Mołot

Antworten:

16

ini_set ('session.gc_maxlifetime', 200000);

  1. Dieser Wert gilt für den Server.
  2. Dies ist eine Einstellung für die Session Garbage Collection.
  3. Wenn der letzte Besuch des Benutzers vor 200000 stattgefunden hat, ist diese Sitzung für die Speicherbereinigung berechtigt.
  4. Da es sich um GC handelt, wird der Sitzungswert möglicherweise verworfen und ist nicht obligatorisch. Wenn eine GC-Aktion ausgeführt wird, nachdem die Sitzung für den GC berechtigt wurde, wird sie gelöscht.
ini_set('session.cookie_lifetime', 2000000);
  1. Dieser Wert gilt für den Browser.

  2. Dies ist die absolute maximale Zeit, bis zu der ein Browser dieses Cookie aktiv halten kann.

  3. Ein 0-Wert bedeutet hier sofort oder wenn der Browser geschlossen wird.

Um insbesondere Ihre Frage zu beantworten.

  1. Wenn der Benutzer den Server innerhalb von 2,3 Tagen nicht zurückruft, wird seine Sitzung gelöscht, wenn die Speicherbereinigung der Sitzung ausgeführt wird.
  2. Wenn er weiterhin alle 2.2 (weniger als 2.3 Tage) eine Seite auf dem Server aufruft, bleibt seine Sitzung aktiv. Es kann jedoch nur bis 23 Tage nach der ersten Generierung der Sitzung aktiv sein.
  3. Das bedeutet also session.cookie_lifetimedie absolute maximale Lebensdauer einer Sitzung.
Gokul NK
quelle
1
Beachten Sie den probabilistischen Garbage Collector. Weitere Details: stackoverflow.com/a/1270960 .
Digitgopher
Eine gute Antwort kann auch in der php.ini erfolgen, wenn Sie auf Ihrem Server Zugriff darauf haben, z. B. in der /etc/php/5.6/fpm/php.iniEinstellung Anpassen (oder Hinzufügen) : session.gc_maxlifetime = 2000000. Danke.
Therobyouknow