Как правильно управлять истечением срока действия cookie сеанса PHP? - PullRequest
0 голосов
/ 06 декабря 2018

Веб-сайт PHP использует куки для хранения идентификатора сессии на стороне браузера.Цель состоит в том, чтобы сеанс PHP считался действительным в течение определенного времени после того, как последний пользователь взаимодействовал с сайтом.

Сеансы PHP имеют два различных времени ожидания:

  • истечение срока действия cookie- когда браузер забывает файл cookie, содержащий идентификатор сеанса
  • срок действия сеанса - когда сервер забывает данные сеанса

Встроенная логика PHP отправляет файл cookie только в первый раз, когда session_start() вызывается, т.е. генерируется идентификатор сеанса.Файл cookie не отправляется при дальнейших запросах, и поэтому срок его действия никогда не увеличивается.

В отличие от этого, срок действия сеанса PHP продлевается при каждом запросе.

Как следствие, еслипользователь постоянно взаимодействует с сайтом, время истечения сеанса PHP увеличивается, но время истечения срока действия cookie сохраняет свое первоначальное значение.

Пример:

  • сеанс PHP и срок действия файлов cookie установлены на 5 временных точек
  • , когда пользователь взаимодействует с сайтом в моменты времени 1, 2 и 4

время / истечение сеанса PHP / истечение срока действия cookie

1/6/6

2/7/6

4/9/6

  • , если конечно, чем взаимодействует с сайтом в момент времени 7, cookie уже истек, поэтому он не будет отправлен на сервер.Таким образом, запрос будет вести себя так, как если бы сеанс PHP истек, даже если сеанс PHP технически действителен.

Как заставить PHP обновлять время истечения срока действия cookie для каждого (или почти для каждого) запроса?Каковы лучшие практики?

Я не нашел ничего полезного в Интернете, и я не нашел никаких возможных обходных путей.Например, я нашел следующие предложения:

  • изначально установить cookie на более длительный срок действия - это просто откладывает магическое исчезновение файла cookie и, в основном, не способствует достижению общей цели (считают сеанс действительным послесамое последнее взаимодействие с пользователем).
  • регенерирует идентификатор сеанса для каждого запроса, который вызывает отправку нового файла cookie - это выглядит несколько агрессивно и может привести к побочным эффектам параллелизма (параллельные запросы, вероятно, не будут поступать из сериализованного браузерано параллельно)
  • управление файлами cookie вручную - для этого требуется имитировать логику PHP (и поддерживать совместимость пользовательской реализации со встроенной логикой), чтобы убедиться, что новый файл cookie с расширенным сроком действия отправляется обратнона каждый запрос

Примечание. Сеанс в этом вопросе означает сеанс, управляемый PHP, а не браузер.Срок действия файлов cookie должен быть независимым от сеансов браузера.Таким образом, предложение Is possible to keep session even after the browser is closed? не имеет никакого отношения к делу.

Редактировать: проблема была классифицирована как ошибка PHP .

...