Dlaczego session.cookie_lifetime jest ustawione na 23 dni? [Zamknięte]

9

O ile rozumiem, czas życia sesji w Drupal jest ograniczony przez session.gc_maxlifetimeustawienie domyślnie ustawione na około 2,3 dni.

Po co więc session.cookie_lifetimeustawiać na 23 dni?

Oto fragment kodu z 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);

Załóżmy, że ustawiłem jedno session.gc_probabilityi session.gc_divisor jedno tylko ze względu na to pytanie.

użytkownik5858
źródło
Ponieważ nie chcesz, aby ciasteczko tajemniczo znikało? Chcesz, żeby tam była, aby sesja mogła zostać bezpiecznie anulowana? Czy to powoduje dla ciebie jakiś faktyczny problem?
Mołot
To tyle. Ale czy nie byłoby lepszym pomysłem, aby pliki cookie wygasały po powiedzmy 40 godzinach, a sesja serwera po 51 godzinach? Mam na myśli, że czas życia plików cookie jest krótszy niż czas wygaśnięcia serwera.
user5858
Jest to w dużej mierze oparte na opiniach i tylko autorzy PHP mogą naprawdę powiedzieć. Aha, i zależy to od procedury obsługi sesji, z której zdecydowałeś się skorzystać. Ale zwykle nie, nie chcesz sesji, która powinna być aktywna i użyteczna przez X godzin więcej, a nikt nie będzie jej używał z powodu braku pliku cookie. To strata pamięci. Pozostawienie pliku cookie dłużej oznacza, że ​​prawie zawsze jest ktoś, kto może korzystać z danych sesji przechowywanych na serwerze, więc żadne przechowywane dane sesji nie są marnotrawstwem.
Mołot

Odpowiedzi:

16

ini_set ('session.gc_maxlifetime', 200000);

  1. Ta wartość dotyczy serwera.
  2. To są ustawienia Session Garbage Collection.
  3. Jeśli ostatnia wizyta użytkowników miała miejsce przed 200 000, sesja kwalifikuje się do wyrzucania elementów bezużytecznych.
  4. Ponieważ jest to GC, wartość sesji może zostać odrzucona i nieobowiązkowa. Jeśli akcja GC wydarzy się po tym, jak sesja zostanie zakwalifikowana do GC, zostanie usunięta.
ini_set('session.cookie_lifetime', 2000000);
  1. Ta wartość dotyczy przeglądarki.

  2. Jest to absolutny maksymalny czas, do którego przeglądarka może utrzymać ten plik cookie aktywny.

  3. Wartość 0 oznacza tutaj natychmiast lub po zamknięciu przeglądarki.

Aby odpowiedzieć w szczególności na twoje pytanie.

  1. Jeśli użytkownik nie wróci na serwer w ciągu 2,3 ​​dni, jego sesja zostanie usunięta po uruchomieniu czyszczenia pamięci sesji.
  2. Jeśli nadal będzie odwiedzał jedną stronę na serwerze co 2.2 (mniej niż 2.3 dni), jego sesja pozostanie aktywna. Ale może być aktywny tylko do 23 dni od pierwszego wygenerowania sesji.
  3. Oznacza to session.cookie_lifetimeabsolutny maksymalny czas trwania sesji.
Gokul NK
źródło
1
Zwróć uwagę na probabilistyczny śmietnik. Więcej informacji: stackoverflow.com/a/1270960 .
digitgopher
Świetna odpowiedź, może być również wykonane w php.ini jeśli masz dostęp do tej, na serwerze np /etc/php/5.6/fpm/php.inidostosować (lub ADD) Otoczenie: session.gc_maxlifetime = 2000000. Dziękuję Ci.
therobyouknow