У этой сессии настройки:Как это работает gc_maxlifetime
@ini_set('session.gc_probability', 1);
@ini_set('session.gc_divisor', 1);
@ini_set('session.gc_maxlifetime', 60);
session_set_save_handler('_sess_open', '_sess_close', '_sess_read', '_sess_write', '_sess_destroy', '_sess_gc');
function _sess_gc($maxlifetime) {
echo "GC started";
}
Насколько я понимаю, с этим настройки сборщик мусора должен работать каждые 60 секунд (так как вероятность и делитель одинаковы). Im тестирует это сейчас и странно, что GC запускается каждый раз, когда обновляется веб-сайт, он не ждет, пока не пройдет 60 секунд от предыдущего вызова. Это немного сбивает меня с толку, я понимаю что-то не так?
ОК. Но какие файлы сеанса точно будут удалены? У меня есть данные сеансов, хранящиеся в БД. и у меня есть моя собственная функция очистки, например: function _sess_gc ($ maxlifetime) { DB :: exec ("delete from table_sessionswhere expiry <". time()); }. Поэтому, если эта функция запускает каждый запрос страницы, это gc_maxlifetime не имеет для меня значения – abiku
Если вы используете свое собственное хранилище сеансов (например, в базе данных), сбор мусора, который вы опубликовали, бесполезен. Построй свой собственный. Просто добавьте в свою базу данных временную метку и обновите ее всякий раз, когда вы обновляете сеанс. Затем добавьте код, который иногда очищает таблицу, ища старые сеансы. ВЫ должны выполнить это самостоятельно. Итак: просто добавьте код в функцию _sess_gc, которая удаляет старые записи. –
Да, но не все функции gc бесполезны. Im использует gc_divisor и gc_probability, чтобы установить, как запустить функцию _sess_gc. Я установил только дату истечения срока действия, не основанную на gc_maxlifetime. Или я могу сделать это так, как вы предложили, т. Е. Проверить временную метку сеанса при ее сохранении. – abiku