Как правило, невозможно хранить одновременную информацию о состоянии сеанса для всех пользователей без значительного снижения производительности. Как вы уже сказали, это результат невозможности правильно завершить сеанс, когда он истекает.
На данный момент у вас есть два варианта:
<сильный>1. Запустите задание cron (детерминированное)
Вы можете настроить задание cron для запуска так часто, как вам нужно. Это гарантирует, что имеющаяся у вас информация не старше интервала cron.
<сильный>2. Установите вероятность GC сеанса
Установка параметров session.gc_probability
и session.gc_divisor
PHP позволяет указать вероятность, с которой очистка сеанса будет инициироваться при каждом запросе. Обычно это относительно низкое значение (например, 1/100), потому что при очень высокой нагрузке на сервер это может очень быстро снизить производительность.
Преимущество этого подхода заключается в том, что он встроен и ничего не стоит вам, если ваш сервер на самом деле не подвергается атакам пользователей.
Главный недостаток заключается в том, что вероятность всегда приходится настраивать с учетом количества запросов в секунду на вашем сервере, которое не является константой. Другими недостатками являются тот факт, что он полагается на запросы для фактической работы (никогда не будет очищать сеансы, если никто не посещает ваш сервер) и что это глобальная настройка (работает на уровне сервера, а не на уровне приложения).
person
Jon
schedule
14.09.2011