我使用Codeigniter 3和数据库作为会话驱动程序。 一切正常,但会话记录不会从数据库中删除。我应该手动删除它们还是..?
等待你的回答。
谢谢。
答案 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。这会清除之前的所有会话,并且意味着一次只存在一个会话。