Как сохранить сеанс PHP после закрытия просмотра? (без отдельных файлов cookie)

#php #session #cookies #session-cookies #session-variables

#php #сеанс #файлы cookie #сессия-файлы cookie #сессия-переменные

Вопрос:

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

На данный момент у меня есть новый сеанс с пустыми параметрами сеанса после каждого перезапуска браузера.

Есть ли какой-либо способ сохранить сеанс PHP активным после каждого перезапуска браузера?

Сайт очень прост без базы данных. Я сохраняю все данные в $ _SESSION.

Ответ №1:

Я предполагаю, что вы используете функцию session_start для запуска нового сеанса. Если я прав, то у вас есть время жизни по умолчанию для файла cookie PHPSESSID, которое равно 0. Нулевое время жизни означает, что cookie — это сеансовые файлы cookie.

Сеансовые файлы cookie удаляются по окончании текущего сеанса. Браузер определяет, когда заканчивается «текущий сеанс», и почти все просмотры завершают сеанс при закрытии просмотра.

Вы можете попробовать установить время жизни для файла cookie сеанса с помощью функции session_set_cookie_params . Первым входным параметром является $lifetime, который определяет время жизни файла cookie сеанса, определяемое в секундах.

Просто попробуйте выполнить session_set_cookie_params(86400) перед session_start и проверьте, подходит ли вам мой ответ.

Комментарии:

1. Отлично. Это работает! Мне интересно, почему в других вопросах никто не написал этот подход?

Ответ №2:

Сеанс PHP имеет параметр «время жизни файла cookie», который можно установить с session.cookie_lifetime помощью настройки ini или session_set_cookie_params функции:

Указывает время жизни файла cookie в секундах, который отправляется в браузер. Значение 0 означает «пока браузер не будет закрыт». По умолчанию равно 0.

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

Например, время жизни 86400 означает «при запуске сеанса вычислите дату через 24 часа (86400 секунд) в будущем и установите ее в качестве даты истечения срока действия файла cookie, отправленного в браузер».

Важные примечания:

  • Чтобы иметь какой-либо эффект, этот параметр необходимо установить перед вызовом session_start , поскольку именно тогда PHP сгенерирует Set-Cookie заголовок для отправки в браузер.
  • Существует отдельная session.gc_maxlifetime настройка, которая определяет, когда удалять данные на сервере. Для этого должно быть установлено значение, равное, по крайней мере, времени жизни файла cookie, в противном случае у возвращающегося пользователя может быть cookie идентификатора сеанса, но нет данных сеанса на сервере.

Комментарии:

1. Спасибо. Мне интересно, почему в других вопросах никто не написал этот подход? Могут ли возникнуть какие-либо неожиданные проблемы?

2. @Anton_John Это зависит от того, о каких других вопросах вы говорите, вы на самом деле не ссылались ни на один.