Не могу разобраться с вопросом.
Заметила, что в таблице сессий в БД, истекшие сессии не очищаются, а накапливаются месяцами.
в файле /system/library/session/db.php
есть функция
public function gc($expire) {
$this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire < " . ((int)time() + $expire));
return true;
}
как я поняла, она должна очищать истекшие сессии, беря значение времени жизни сессии из кода, что ниже
$this->expire = ini_get('session.gc_maxlifetime');
в php.ini указано session.gc_maxlifetime = 3600;
Но ничего не чистится.
Я заглянула в таблицу создаваемых сессий, и заметила, что время жизни сессии прибавляется к времени начала сессии совсем не 3600, а из настроек php у сервера 1440
То есть этот код не берет данные из php.ini
заменила на
$this->expire = 3600;
после этого стало прибавлять ровно час.
но function gc($expire), которая тут самая первая в посте, видимо так и не срабатывает- устаревшие сессии так и лежат в бд
Вопрос собственно в чем. Почему этот код не подцепляет запись из php.ini
$this->expire = ini_get('session.gc_maxlifetime');
и почему так и не удаляются устаревшие сессии?