Чому для сеансу.cookie_lifetime встановлено 23 дні? [зачинено]


9

Наскільки я розумію, тривалість сеансу в Drupal обмежена session.gc_maxlifetimeвстановленням за замовчуванням встановлено приблизно 2,3 дня.

Тоді в чому користь session.cookie_lifetimeвстановлення 23 днів?

Ось фрагмент від 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);

Будь ласка, припустіть, що я встановив і те, session.gc_probabilityі session.gc_divisor 1 лише заради цього питання.


Тому що ви не хочете, щоб печиво загадково зникло? Ви хочете, щоб це було там, щоб сесія могла бути визнана недійсною? Це спричинює для вас якусь актуальну проблему?
Молот

Ось тоді. Але чи не було б кращою ідеєю зробити так, щоб термін дії файлів cookie закінчився через 40 годин, а сервер - 51 годину? Я маю на увазі термін використання файлів cookie менше, ніж термін дії сервера.
user5858

Це багато в чому ґрунтується на думці, і лише автори PHP дійсно можуть сказати. О, і це залежить від обробника сесії, який ви вирішили використовувати. Але зазвичай ні, ви не хочете, щоб сеанс, який повинен бути активним і придатним для використання ще протягом X годин, і ніхто не використовує його через відсутні файли cookie. Це марно зберігання. Якщо залишити файл cookie довше, це означає, що майже завжди є хтось, хто може використовувати дані сеансу, що зберігаються на сервері, тому жодні збережені дані сеансу не є марною.
Молот

Відповіді:


16

ini_set ('session.gc_maxlifetime', 200000);

  1. Це значення призначено для сервера.
  2. Це налаштування для сеансу збору сміття.
  3. Якщо останній візит користувачів відбувся до 200000-х років, цей сеанс придатний для збору сміття.
  4. Оскільки це GC, значення сеансу може бути відкинуто і не обов’язково. Якщо дія GC відбудеться після того, як сеанс став прийнятним для GC, він буде видалений.
ini_set('session.cookie_lifetime', 2000000);
  1. Це значення призначено для браузера.

  2. Це абсолютний максимальний час, до якого браузер може підтримувати цей файл cookie активним.

  3. Значення 0 тут означає негайне або коли браузер закритий.

Щоб відповісти на ваше запитання, зокрема.

  1. Якщо користувач не натисне сервер за 2.3 дня, його сеанс буде видалено, коли сеанс збирання сміття буде запущений.
  2. Якщо він продовжує натискати одну сторінку на сервері кожні 2,2 (менше 2,3 дня), то його сеанс залишатиметься активним. Але він може бути активним лише до 23 днів з моменту першої сесії.
  3. Отже, це означає session.cookie_lifetimeабсолютний максимальний термін служби сеансу.

1
Зверніть увагу на ймовірнісний збір сміття. Детальніше: stackoverflow.com/a/1270960 .
digitgopher

Великий відповідь, також може бути зроблено в php.ini , якщо у вас є доступ до цього на вашому сервері , наприклад , в /etc/php/5.6/fpm/php.iniналаштувати (або додати) настройки: session.gc_maxlifetime = 2000000. Дякую.
therobyouknow
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.