Почему для session.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 только ради этого вопроса.

user5858
источник
Потому что ты не хочешь, чтобы печенье загадочно исчезало? Вы хотите, чтобы он был там, чтобы сессия могла быть отменена изящно? Это вызывает какие-то реальные проблемы для вас?
Молот
Вот и все. Но не лучше ли сделать так, чтобы срок действия файлов cookie истекал, скажем, в 40 часов, а сеанс сервера - в 51 час? Я имею в виду, что время жизни файла cookie меньше времени истечения срока действия сервера.
user5858
Это в значительной степени основано на мнении, и только авторы PHP могут действительно сказать. О, и это зависит от обработчика сеанса, который вы решили использовать. Но обычно нет, вам не нужен сеанс, который должен быть активным и пригодным для использования в течение X часов, и никто не сможет его использовать из-за отсутствия cookie. Это пустая трата хранения. Длительное сохранение cookie означает, что почти всегда есть кто-то, кто может использовать данные сеанса, хранящиеся на сервере, поэтому никакие данные сеанса не являются пустой тратой.
Молот

Ответы:

16

ini_set ('session.gc_maxlifetime', 200000);

  1. Это значение для сервера.
  2. Это настройки для Session Garbage Collection.
  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 .
дигиттер
Великий ответ, также может быть сделано в php.ini , если у вас есть доступ к этому на вашем сервере , например , в /etc/php/5.6/fpm/php.iniнастроить (или добавить) настройки: session.gc_maxlifetime = 2000000. Спасибо.
therobyouknow