Session_set_save_handler close / gc - PullRequest
0 голосов
/ 29 июня 2009

Мне нужно выполнить действие после истечения времени ожидания сеанса. Однако я понятия не имею, как вызвать это действие без входящего запроса. Обработчик событий / слушатель / таймер подойдет идеально, но так как PHP не поддерживает такую ​​вещь, действительно трудно достичь того, чего я хочу.

После долгих поисков я наткнулся на session_set_save_handler, но до сих пор не могу полностью понять, как работает этот метод. Если я напишу код, который запускает действие внутри метода close, когда оно будет выполнено?

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

Привет!

Ответы [ 2 ]

0 голосов
/ 29 июня 2009

Это немного сложно сделать в php, AFAIK.

Но вы можете попробовать сделать пассивный обработчик сессии:

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

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

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

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

0 голосов
/ 29 июня 2009

PHP должен каким-то образом запускаться для выполнения кода PHP. Либо через запрос пользователя, либо cronjob.

Сессия сохраняется в хранилище локали, когда PHP-запрос завершается или когда session_write_close() вызывается

Этот session_set_save_handler() позволяет вам написать свой собственный обработчик сохранения.

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