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 - 会话库的主要内容,如果未能解决你的问题,请参考以下文章

在 Codeigniter 3 中扩展会话库

Codeigniter 3 - 会话不工作

即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?

Codeigniter 会话库错误

我应该在 CodeIgniter 中使用哪个会话库?

使用 codeigniter ci_marchant_Lib 库的 PayPal 定期付款