Как обработать уничтожение сессии в Zend Framework? - PullRequest
0 голосов
/ 14 сентября 2011

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

При уничтожении сеанса я хочу обновить таблицу БД, например?

Я предпочитаю не использовать задание cron, так как оно сильно загружается на сервере.

Заранее спасибо.

1 Ответ

0 голосов
/ 14 сентября 2011

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

На данный момент у вас есть два варианта:

1. Запустить задание cron (детерминированное)

Вы можете настроить работу cron так часто, как вам нужно. Это гарантирует, что имеющаяся у вас информация не старше возраста cron.

2. Установить вероятность GC сеанса

Установка опций PHP session.gc_probability и session.gc_divisor позволяет указать вероятность, с которой будет запускаться очистка сеанса при каждом запросе . Как правило, это относительно низкое значение (например, 1/100), потому что при очень высоких нагрузках на сервер это может очень быстро снизить производительность.

Преимущества этого подхода в том, что он встроен и ничего не стоит, если ваш сервер фактически не поражен пользователями.

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

...