Подтвердить что ты не робот

Как устаревают сеансы codeigniter?

Эксперты,

Я пытаюсь понять, как очищаются сеансы в Codeigniter, если приложение настроено на сохранение сеансов в таблице базы данных.

В моем случае у меня есть три истекших сеанса в этой таблице сеансов и один активный для одного и того же пользователя. В руководстве указано: "Примечание. Класс Session имеет встроенную сборку мусора, которая очищает истекшие сеансы, поэтому вам не нужно писать свою собственную процедуру, чтобы сделать это".

Хмм, так когда моя "старая" сессия в таблице сеанса db очищается или я что-то пропускаю?

спасибо!

4b9b3361

Ответ 1

Здесь соответствующий исходный код класса Session:

/**
 * Garbage collection
 *
 * This deletes expired session rows from database
 * if the probability percentage is met
 *
 * @access  public
 * @return  void
 */
function _sess_gc()
{
    if ($this->sess_use_database != TRUE)
    {
        return;
    }

    srand(time());
    if ((rand() % 100) < $this->gc_probability)
    {
        $expire = $this->now - $this->sess_expiration;

        $this->CI->db->where("last_activity < {$expire}");
        $this->CI->db->delete($this->sess_table_name);

        log_message('debug', 'Session garbage collection performed.');
    }
}

Эта функция вызывается в одном месте, в конструкторе класса Session (почти последняя строка), поэтому один раз для запроса при обычных обстоятельствах.

$this->gc_probability жестко закодирован до 5 в верхней части класса, и, похоже, его невозможно изменить. Я не уверен, но я считаю, что это означает, что в 5% случаев (случайно) будет запущена сборка мусора, очищая старые записи из таблицы сеансов DB.

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