Узнайте, истек ли сеанс с определенным идентификатором

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

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

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

Related of "Узнайте, истек ли сеанс с определенным идентификатором"

Вы не можете просто полагаться на session.gc_maxlifetime, потому что после этого времени сеанс помечен как мусор, и сборщик мусора запускается только с вероятностью 1% по умолчанию (session.gc_probability).

Лучший подход IMHO – обработать ваши устаревшие данные.

Вы можете, например, запустить время и сохранить его в переменной сеанса:

<?php $_SESSION['last_seen'] = time();//Update this value on each user interaction. ?> 

Позже..via cron вы можете сделать что-то вроде этого:

 <?php //Get the session id from file name and store it into the $sid variable; session_id($sid);//try to resume the old session session_start(); if (isset($_SESSION['last_seen']) && $_SESSION['last_seen'] > $timeout){//Session is expired //delete file session_destroy(); }else if (!isset($_SESSION['last_seen')){ //already garbaged //delete file session_destroy(); } ?> 

Не проверено … просто идея

Я пытаюсь сделать то же самое. Одним из решений было бы определить пользовательскую функцию сбора мусора с session_set_save_handler() . В этой пользовательской функции вы удаляете загруженные файлы, связанные с сеансом, а затем удаляете сеанс с диска. Единственная проблема, я вижу, что вам придется определять остальные обработчики сеанса:

 bool session_set_save_handler ( callback $open, callback $close, callback $read, callback $write, callback $destroy, callback $gc ) 

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

Интервалы могут быть сделаны следующим образом: кто-то открывает вашу сеть – работает скрипт php -> он проверяет, не отключены ли файлы -> удалять файлы с отложенным временем

И никакой CRON не требовалось 🙂

Это почти невозможно определить из-за отсутствия информации, если пользователь закрыт или нет окна браузера (если он не закрывает его, а включит режим сна и возвращается через 2 дня – сеанс все еще активен AFAIK) – только идея для slove эта проблема наилучшим образом заключается в использовании собственного механизма сеанса с проверкой AJAX.