Я использую комбинацию PHP + APACHE + CENTOS Linux.
Я внедрил логин и выход на веб-сайт.
Мой вопрос в том, как узнать, когда тайм-аут php-сессии был отключен (Пользователь закрыл свой браузер без выхода из системы)?
Причина в том, что я хочу выполнить некоторые очистки и / или обновления баз (вызывая другой PHP), когда пользователь выполнил одно из следующих действий: (1) LOGGED-OUT или (2) TIMED-OUT
Я предполагаю, что мне придется использовать Apache / Linux, верно?
Вместо того, чтобы обнаруживать, когда время сеанса php вышло из строя, вы можете создать скрипт, который будет запускаться с некоторым полу регулярным интервалом (каждые 5 минут говорят, используя, скорее всего, работу crontab), которая выйдет из системы / выполнит очистку для всех, кто hasn ' t был активен в последний час (или независимо от вашего значения тайм-аута) автоматически. Просто добавьте «lastseen» в свою пользовательскую таблицу.
Если вы сохраняете детали своих сеансов в таблице базы данных и регистрируете любые действия, вы можете легко проверить, какие сеансы были неактивными в течение определенного периода времени.
Добавление функций очистки к действиям пользователя замедлит работу вашего сайта без необходимости. Пользователю не нужно ждать, пока такие действия произойдут до получения ответа от сервера.
Вместо этого вы можете добавить действия, которые должны выполняться в таблицу очередей, а затем использовать задание CRON для периодической проверки таблицы очередей, чтобы увидеть, что нужно сделать. Синтаксис CRON указан здесь .
Вы можете сохранить идентификатор сеанса в базе данных с отметкой времени и обновить отметку времени каждый раз, когда пользователь запрашивает веб-страницу.
Затем установите cron, который смотрит на каждый «активный» сеанс, вычисляет время бездействия и обновляет сеанс до «мертвого» (это может быть сделано с одним SQL-статусом, который выполняется периодически).
Кроме того, измените ваш выход, чтобы обновить таблицу сеансов и установить сеанс «мертвым».
Во всяком случае, я не думаю, что есть другие способы сделать это (с «стандартными» функциями PHP), но давайте посмотрим, что говорят другие люди.
У меня была такая же проблема, хотя с Lighty + PHP + Ubuntu. Я думаю, проблема заключается в том, что php реагирует только на запросы страниц, поэтому нет возможности заставить PHP поднять событие на тайм-аут.
Вы можете переопределить функции хранилища сеансов в PHP, но это тоже вам не поможет.
Вы могли сохранить время последнего события в сеансе, хотя, и каждый сеанс начал очищать старые сеансы, которые запускались с тайм-аутами. Не очень чистый путь, но единственный рабочий способ, который я нашел.