は、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テーブルから古いエントリをクリアすることを意味します。
これらの古いエントリは重要ではないことに注意してください。クリーンアップは、データベーステーブルが古い無駄なレコードでオーバーロードされないようにのみ行われます。
2.1.3(user_data)以前はクリアされていませんでした。手動でクリアする必要があったので、セッションにuser_dataが含まれていましたか?もしそうなら、$ this-> session-> unset_userdata(array(...));を使います。それ以外の場合は、$ this-> session-> sess_destroy()は – Philip
で十分です。フィリップ氏に感謝しますが、Codeigniterが自動的にセッションをクリーンアップする方法と、期限切れ後に調べる方法を知りたかったのです。 – dutchman711