Codeigniter 3 - 会话库

时间:2015-04-28 11:27:48

标签: php codeigniter session

我使用Codeigniter 3和数据库作为会话驱动程序。 一切正常,但会话记录不会从数据库中删除。我应该手动删除它们还是..?

等待你的回答。

谢谢。

2 个答案:

答案 0 :(得分:2)

您的意思是在用户注销时要清除会话。如果你的意思是你可以使用下面的代码。您必须手动删除会话内的数据。如果您没有手动销毁它,那么数据将在您的数据库中可用,直到达到会话到期为止。

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

或者,如果您想在会话中清除特定数据,可以使用下面的代码

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

如果您使用会话存储Flash数据,则该会话仅适用于下一个请求。示例代码如下

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

答案 1 :(得分: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));

其中$ identity是您的用户ID。这会清除之前的所有会话,并且意味着一次只存在一个会话。