2015-04-28 98 views
-2

我使用Codeigniter 3和數據庫作爲會話驅動程序。 一切工作正常,但會話記錄不會從數據庫中刪除。我應該手動刪除它們還是..?Codeigniter 3 - 會話庫

等待您的答案。

謝謝。

+1

你試過了什麼?在您的問題中提供代碼 –

+0

我沒有任何用於從數據庫中刪除記錄的代碼。在CI 2,它說:Session類已經內置了垃圾收集,所以你不需要編寫自己的程序去做它清除了過期的會話。但我正在使用CI3,似乎數據庫中的會話不會被刪除。 – Vesna

回答

1

你的意思是當用戶註銷你想清除會話。如果你意味着你可以使用下面的代碼。您必須手動刪除會話內的數據。如果不手動銷燬數據,則數據將在數據庫中可用,直至到達會話過期。

session_destroy();  
// or  
$this->session->sess_destroy(); 

或者,如果你想清除session裏面spesific數據如果您使用會話來存儲閃存數據,那麼會話只只可用於下一個請求,你可以使用下面

unset($_SESSION['some_name']); 
// or 
$this->session->unset_userdata('some_name'); 

的代碼。示例代碼像下面

$_SESSION['item'] = 'value'; 
$this->session->mark_as_flash('item'); 
+0

謝謝你的回答。會話到期已達到,但數據庫中的記錄未被刪除。 – Vesna

1

here

複製創建在ci_session表中的新列。

ALTER TABLE `yourdatabase`.`ci_sessions` 
ADD COLUMN `userid` VARCHAR(45) NULL AFTER `user_data` ; 

然後在您的登錄功能與你的登錄過程,並增加了用戶數據信息到會議之前得到ID做:

//delete any existing sessions with the current userid session. 
// Note - a new session has already been generated but doesn't have a value 
// in the userid column, so won't get deleted. 
$this->db->delete('ci_sessions',array('userid' => $identity));  

//get the current session and update it with the userid value. 
$session_id = $this->session->userdata('session_id'); 
$this->db->where('session_id', $session_id); 
$this->db->update('ci_sessions', array('userid' => $identity)); 

其中$身份是你的用戶ID。這清除了以前的任何會話,並且意味着一次只存在一個會話。

+0

所以我必須手動刪除記錄?注:Codeeriter 3 – Vesna

+0

是的,正如Stevo在他的回答中所建議的 –