Intereting Posts

PHP Сделайте что-то, когда сессия истекла

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

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

EDIT Спасибо всем за ваши замечательные ответы, это дало мне немало отличных идей, я бы хотел принять все ваши ответы 🙂

Solutions Collecting From Web of "PHP Сделайте что-то, когда сессия истекла"

Один из способов – позвонить

$thePath = session_save_path(); 

и итерации по всему сохраненному файлу сеанса, unserialze each и проверить их на указанное свойство таймаута.

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

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

Улучшенный подход с использованием базы данных

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

Документация для session_set_save_handler() предоставляет образец, который объясняет весь этот процесс довольно хорошо на основе объектов.

Хороший вопрос! Моя первая идея заключалась в использовании решения на базе базы данных. Если вы этого еще не сделали, вы будете отслеживать все активные сеансы в сеансах таблицы, которые, помимо прочего, могут потребоваться session_id и last_visited_time . Эта запись будет обновляться каждый раз, когда пользователь посещает ваш сайт:

 UPDATE sessions WHERE session_id = "<current session id>" SET last_visited_time = NOW() 

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

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