2013-10-04 23 views
0

的application/config/config.php文件常設會議

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 0; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

因爲我有一個永久的會議:$config['sess_expiration'] = 0;和會話更新每隔5分鐘:$config['sess_time_to_update'] = 300;有未使用的行數量龐大在ci_sessions表在爲僅3到4用戶ci_sessions表中的數據,每天去1 MB

所以,我想要做的是這樣的:

$config['sess_expiration'] = 0; 
$config['sess_time_to_update'] = 60*60*24*365*2; 
and 
var $gc_probability = 0; 

2年到期時間和更新時間,所以一個單一的瀏覽器將會出現,這將永遠不會被刪除的ci_sessions表中只有一項,因爲GC的概率是0,我會有我自己清理代碼每隔一個月左右,除去未使用的會話。但問題是:

它不只是會話更改,這使得新進入 ci_sessions表,但每刷新使一個新的條目。其中 會產生大量未使用會話的相同問題。

如何避免每次刷新或頁面調用時出現新的會話ID?

回答

0

大概是因爲如果會話過期設置爲0,那麼它實際上沒有被視爲無限。這只是從不保存會話。如何將到期時間設置爲一年?

當用戶關閉他們的瀏覽器時,我不會看到需要保留會話的時間(我發現瀏覽器已關閉,如果用戶在瀏覽器中清除了Cookie,仍然有可能)關閉)或手動清除他們的Cookie。這也是,如果你正在處理登錄等你說你正在使用的數據庫,但你的代碼片段不敢苟同安全風險..

$config['sess_use_database'] = FALSE; 

嘗試讓會話終止時間高於會話更新時間,這可能會導致問題。你有沒有嘗試增加到期時間來說60秒,刷新頁面幾次?

+0

'sess_use_database = FALSE'是一個錯字。但是,如果會話過期設置爲0,則需要2年(在源代碼中)。我沒有看到需要保持會話很長時間,因爲當用戶關閉瀏覽器時他們將被刪除(我看到如果我設置了'$ config ['sess_expire_on_close'] = FALSE;',這種情況不會發生。但是,當Cookie被清除時發生,這是預期的行爲 –

+0

@ Archie.bpgc嘗試讓會話終止時間高於會話更新時間,這可能會導致問題。你有沒有嘗試增加到期時間來說60秒,刷新頁面幾次? – SamV

+0

'如果($這 - > sess_expiration == 0) \t \t { \t \t \t $這 - > sess_expiration =(60 * 60 * 24 * 365 * 2); \t \t}'這是我在會話類中。所以,0實際上是2年。 –