Повторный вызов тайм-аута сеанса PHP?

Я использую комбинацию PHP + APACHE + CENTOS Linux.

Я внедрил логин и выход на веб-сайт.

Мой вопрос в том, как узнать, когда тайм-аут php-сессии был отключен (Пользователь закрыл свой браузер без выхода из системы)?

Причина в том, что я хочу выполнить некоторые очистки и / или обновления баз (вызывая другой PHP), когда пользователь выполнил одно из следующих действий: (1) LOGGED-OUT или (2) TIMED-OUT

Я предполагаю, что мне придется использовать Apache / Linux, верно?

Вместо того, чтобы обнаруживать, когда время сеанса php вышло из строя, вы можете создать скрипт, который будет запускаться с некоторым полу регулярным интервалом (каждые 5 минут говорят, используя, скорее всего, работу crontab), которая выйдет из системы / выполнит очистку для всех, кто hasn ' t был активен в последний час (или независимо от вашего значения тайм-аута) автоматически. Просто добавьте «lastseen» в свою пользовательскую таблицу.

Отслеживание сеансов в базе данных

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

Очередь процессов

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

CRON

Вместо этого вы можете добавить действия, которые должны выполняться в таблицу очередей, а затем использовать задание CRON для периодической проверки таблицы очередей, чтобы увидеть, что нужно сделать. Синтаксис CRON указан здесь .

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

Затем установите cron, который смотрит на каждый «активный» сеанс, вычисляет время бездействия и обновляет сеанс до «мертвого» (это может быть сделано с одним SQL-статусом, который выполняется периодически).

Кроме того, измените ваш выход, чтобы обновить таблицу сеансов и установить сеанс «мертвым».

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

У меня была такая же проблема, хотя с Lighty + PHP + Ubuntu. Я думаю, проблема заключается в том, что php реагирует только на запросы страниц, поэтому нет возможности заставить PHP поднять событие на тайм-аут.

Вы можете переопределить функции хранилища сеансов в PHP, но это тоже вам не поможет.

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