Codeigniter 3 - 会话库
Posted
技术标签:
【中文标题】Codeigniter 3 - 会话库【英文标题】:Codeigniter 3 - session library 【发布时间】:2015-07-07 05:33:27 【问题描述】:我使用 Codeigniter 3 和数据库作为会话驱动程序。 一切正常,但会话记录不会从数据库中删除。我应该手动删除它们还是..?
等待您的答复。
谢谢。
【问题讨论】:
你尝试了什么?在您的问题中提供代码 我没有任何用于从数据库中删除记录的代码。在 CI 2 中它说: Session 类具有内置的垃圾收集功能,可以清除过期的会话,因此您无需编写自己的例程即可。但我正在使用 CI3,似乎数据库中的会话没有被删除。 【参考方案1】:您的意思是当用户注销时您要清除会话。如果你的意思是你可以使用下面的代码。您必须手动删除会话内的数据。如果您不手动销毁它,则数据将在您的数据库中可用,直到会话到期。
session_destroy();
// or
$this->session->sess_destroy();
或者如果你想清除会话中的特定数据,你可以使用下面的代码
unset($_SESSION['some_name']);
// or
$this->session->unset_userdata('some_name');
如果你使用 session 来存储 flash 数据,那么 session 只能用于下一个请求。示例代码如下
$_SESSION['item'] = 'value';
$this->session->mark_as_flash('item');
【讨论】:
感谢您的回答。会话到期,但未删除数据库中的记录。【参考方案2】:复制自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。这会清除之前的所有会话,意味着一次只存在一个。
【讨论】:
是的,正如 Stevo 在他的回答中所建议的那样以上是关于Codeigniter 3 - 会话库的主要内容,如果未能解决你的问题,请参考以下文章