我想了解工作階段如何清理在笨的情況下,應用程序被配置爲在數據庫表中存儲會話。
就我而言,我在該會話表中有三個過期的會話,同一個用戶有一個活動的會話。該手冊指出: 「注意:Session類具有內置的垃圾回收功能,可以清除過期的會話,因此您無需編寫自己的例程來執行此操作。」
嗯,那麼當我的數據庫會話表中的'舊'會話被清除出去,還是我錯過了什麼?
謝謝!
我想了解工作階段如何清理在笨的情況下,應用程序被配置爲在數據庫表中存儲會話。
就我而言,我在該會話表中有三個過期的會話,同一個用戶有一個活動的會話。該手冊指出: 「注意: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.');
}
}
調用此功能在一個地方,在會話類(幾乎是最後一行)的構造,所以一旦每個請求一般情況下。
$this->gc_probability
被硬編碼爲5
在類的頂部,它似乎不可能改變它。我不確定,但我相信這意味着垃圾收集將運行5%(隨機),從會話數據庫表中清除舊條目。
請注意,這些舊條目沒有意義或傷害,只進行清理,以便您的數據庫表不會因過時,無用的記錄而過載。
非常感謝您的洞察! :) – dutchman711
在2.1.3(user_data)未被清除之前,您必須手動清除它,所以您的會話是否包含任何user_data?如果是這樣,使用$ this-> session-> unset_userdata(array(...));否則$ this-> session-> sess_destroy()應該足夠了 – Philip
感謝Philip,但我想知道Codeigniter如何自動清理會話以及到期後的時間...... – dutchman711