сессия — может ли PHP $ _SESSION пережить сбой веб-сайта

Я знаю, что это действительно расплывчатый вопрос, но мне было интересно, как переменная $ _SESSION может выдерживать стресс. Если $ _SESSION похож на cookie, то, как только пользователь удалит свои куки из браузера, тогда $ _SESSION должен быть уничтожен. Кроме того, если вызывается session_destroy (), то переменная $ _SESSION будет уничтожена.

Существуют ли другие случаи, когда переменная $ _SESSION может быть уничтожена, как, например, сбой веб-сайта? Если PHP перегружен на веб-сайте, должен ли он напрямую влиять на $ _SESSION или любые другие функции и переменные, связанные с ним, или он влияет на все в целом?

Почему я спрашиваю?
Я почти закончил написание сценария оставленной корзины для своего сайта электронной коммерции, и я хотел перенаправить клиентов обратно на сайт, где их заказ все еще будет сохранен в $ _SESSION. Единственный способ уничтожить $ _SESSION — это если клиент завершает покупку. Конечно, клиент также может удалить куки в своем браузере.

Но мне интересно, есть ли еще один случай, когда $ _SESSION может быть уничтожен помимо тех двух, упомянутых выше.

Многие заброшенные системы корзин хранят информацию о заказе в базе данных и включают ее в электронное письмо, которое получает пользователь, чтобы они могли видеть заказ внутри электронного письма. Конечно, я могу записать заказ в базу данных, но проще просто сохранить все в $ _SESSION и попросить клиента вернуться на сайт, оставив свой заказ в активном $ _SESSION.

Что может выжить $ _SESSION?

2

Решение

Сессии обычно хранятся на диске, в каталоге, определяемом session.save_path (обычно /tmp).

Когда процесс PHP загружен и вы запускаете session_start()сеанс восстанавливается с версии, сохраненной на диске. Когда процесс PHP завершается правильно (без ошибок и т. Д.), Текущее состояние сеанса записывается обратно на диск.

Итак, насколько большой может быть сессия? Ограничения:

  • Размер диска для сериализованного объекта сеанса (не должно быть проблемой).
  • Обработка: десериализация и сериализация огромных структур пожирают ресурсы процессора.
  • Память: огромная $_SESSION переменная занимает много места в вашей памяти. (Возможно, вам придется увеличить memory_limit.)

Есть еще одна важная другая ситуация (помимо тех, которые вы упомянули), где сессии удаляются, это вывоз мусора. В зависимости от того, как настроен ваш сервер, фоновое задание проходит через все сеансы каждые несколько минут и удаляет просроченные. Или каждый Иксго вызов PHP вызывает GC (не вдаваясь в детали, так как они здесь неактуальны). Срок действия по умолчанию зависит от вашей версии PHP и поставщика ОС, но обычно он составляет от 30 минут до 1 часа.

Если у вас есть приложение для покупок, вы можете увеличить срок действия своих сеансов, установив соответствующее значение для session.gc_maxlifetime,

1

Другие решения

Переменные сессии сохраняются на вашем сервере. Мои по умолчанию находятся в / var / lib / php / session для моего сервера dev. Однако используемая мной среда обрабатывает их совершенно по-разному, поэтому используемые переменные сеанса находятся в папке приложения.

Они остаются даже после перезагрузки. Однако при использовании сеанса php по умолчанию в папке / tmp при перезагрузке всем пользователям придется перезагружаться … опять же, это зависит от вашей ОС, но большинство / all будет очищать / tmp при перезагрузке.

проверьте ваш session.save_path, чтобы убедиться, что они не сохранены в / tmp, а также session.gc_maxlifetime, чтобы убедиться, что они не истекли. Если ни один из них не установлен, он использует php по умолчанию для вашей системы, который вы должны изучить.

1

  1. Сессия может быть уничтожена с помощью PHP или любого другого языка на стороне сервера.
  2. Сессия будет уничтожена после простоя до 24 минут (по умолчанию в случае PHP)
  3. Сессия будет уничтожена после закрытия браузера, если вы не используете постоянные куки для сессии.
  4. Кроме того, сессии обычно не становятся недействительными после сбоя сервера. В большинстве случаев PHP и GC даже не знают о сбое сервера. Если агент UA отправляет действительный файл cookie и сеанс обнаруживается на диске, его можно продолжить без проблем, как предлагает lyx
-1
По вопросам рекламы [email protected]