セッション クラスの関連するソース コードは次のとおりです。
/**
* 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 クラスのコンストラクターの 1 か所 (ほぼ最後の行) で呼び出されるため、通常の状況では要求ごとに 1 回呼び出されます。
$this->gc_probability
クラスの先頭にハードコードさ5
れており、変更できないようです。確かではありませんが、これは 5% の確率で (ランダムに) ガベージ コレクションが実行され、セッション DB テーブルから古いエントリが消去されることを意味すると思います。
これらの古いエントリは重要でも害でもないことに注意してください。クリーンアップは、データベース テーブルが古くて役に立たないレコードで過負荷にならないようにするためだけに行われます。