Как PHP знает, когда удалять сеанс? - PullRequest
3 голосов
/ 01 января 2012

Я думал, что сеансы хранятся на стороне клиента из-за того, что сеанс удаляется при закрытии браузера. Однако сегодня мне сказали, что это неправда и сеанс хранится на сервере.

Итак, как сеанс узнает, когда браузер был закрыт, так что сеанс удаляется?

Ответы [ 3 ]

6 голосов
/ 01 января 2012

Это не так. Есть два фактора:

  • время жизни cookie на стороне клиента; Этот файл cookie содержит идентификатор сеанса. не имеет никакого отношения к самим данным сеанса .

    Руководство, вероятно, недостаточно подчеркивает:

    Это не имеет никакого отношения к продолжительности сеанса

    Независимо от того, что вы установили для этого параметра, оно не изменит продолжительность сеансов. жить на вашем сервере.

    Это только меняет срок действия HTTP-кэша (Expires: и Cache-Control: max-age заголовки), которые советуют браузеру как долго может хранить страницы в кэше пользователя без необходимости их перезагрузки с сервера.

  • время жизни данных сеанса на стороне сервера; Сеанс «активируется» посредством поиска с идентификатором сеанса от клиента. Его время жизни контролируется с помощью настроек сборки мусора сеанса, обсуждаемых здесь .

    Комментарий, размещенный на странице документации session.cache_expire, предположительно фактически говорящий о данных сеанса:

    Большинство людей также не знают, что большинство дистрибутивов Linux (Debian и Ubuntu для меня по крайней мере) есть cronbjob, который убирает ваши dir сеанса с использованием значения, установленного в глобальном /etc/php5/php.ini (который по умолчанию 24 минуты). Так что даже если вы установите значение больше в вашем сценарии, cronbjob будет по-прежнему очищать сессии с использованием глобального значение.

    Если вы столкнетесь с такой ситуацией, вы можете установить глобальное значение выше в /etc/php5/php.ini, отключите cronjob или, что еще лучше, сделайте свое очистка сеанса в несистемном каталоге или базе данных.

    Как вы можете видеть, в сообществе существует множество путаниц при различии между сеансом отслеживанием и данными сеанса хранилищем .

3 голосов
/ 01 января 2012

Сессия идентифицируется cookie, который сохраняется в браузере. У него может быть дата / время истечения, или он может быть установлен, чтобы истечь, когда браузер закрыт. Когда срок действия файла cookie истекает, вы больше не можете идентифицировать свое хранилище сеанса, и срок сеанса фактически истек. Он не будет удален, если системные администраторы или программисты не выполнят специальную очистку.

РЕДАКТИРОВАТЬ Только что заметил тег PHP. Чтобы узнать, как PHP очищает свои файлы сеансов, проверьте этот вопрос .

0 голосов
/ 01 января 2012

Сервер не может знать, когда браузер закрыт.Закрытие браузера приведет к удалению cookie-файла идентификатора сеанса с клиента.

Сессия удаляется с сервера, если в течение определенного периода времени нет запросов (время ожидания сеанса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...