Как определить, когда сессия заканчивается. PHP - PullRequest
2 голосов
/ 11 февраля 2012

Я не знаю, возможно ли это.То, что я ищу, - это событие (если оно есть), которое запускается для завершения сеанса.Я хотел бы как-то захватить это и выполнить свое собственное действие прямо перед окончанием сессии.Причина этого в том, что мне нужна одна из переменных сеанса, которые я потеряю, как только истечет время сеанса.

Я чувствую, что это, вероятно, плохой способ достижения моей цели, если это возможно.Пятница 7:00 вечера и все еще в офисе.представьте мое волнение, пытающееся найти решение.

Спасибо, ребята.

Ответы [ 5 ]

2 голосов
/ 11 февраля 2012

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

См. session_set_save_handler , в частности, обратный вызов gc.

1 голос
/ 11 февраля 2012

Если у вас есть доступ к базе данных, вы можете сохранить информацию о сеансе в таблице сеансов и извлечь эту переменную из последнего сеанса, зарегистрированного этим конкретным пользователем.

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

0 голосов
/ 11 февраля 2012

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

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

0 голосов
/ 11 февраля 2012

Вы можете сделать это с помощью Javascript.Пусть сервер доставит функцию JS, которая будет находиться в спящем режиме до истечения срока действия сеанса.

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

Вы могли бы также истечь ваши сеансы до того, как вы действительно удалите данные, и иметьпользовательский обработчик, который предупреждает пользователей и дает им льготный период.Во второй раз, когда запускается обработчик уничтожения, фактически удаляются данные.

0 голосов
/ 11 февраля 2012

Вы можете сохранить данные в cookie и контролировать дату истечения срока действия:

setcookie("TestCookie", $value, time()+3600);  /* expire in 1 hour */

http://php.net/manual/en/function.setcookie.php

Таким образом, вам не нужно изменять функциональность обычного сеанса и разрешатьсрок их действия истекает.

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