如何在codeigniter会话到期时执行一个函数

时间:2013-08-04 19:46:30

标签: codeigniter session-timeout

我的数据库上有一个用户表,其中包含“在线”字段,当用户登录时,它获得值“1”,并在用户注销时更改为0。问题是如果用户关闭标签而没有点击“注销”按钮,他将永远保持在线状态。

所以我想挂钩某种功能,所以当会话到期时,它会将这个“在线”字段的值 - 在数据库上 - 更改为“0”。

我当然愿意接受建议,因为我不知道什么是正确的方法。

3 个答案:

答案 0 :(得分:2)

您可以通过扩展CI_Session

来实现此目的

在application / core / MY_Session.php

中创建一个php文件
class MY_Session extends CI_Session
{

public function __construct() {
    parent::__construct();
}

function sess_destroy() {

    //update the Online filed as required
    $this->CI->db->update('YOUR_TABLE', array('YOUR_DATA'), array('YOUR_CONDITION'));

    //call the parent 
    parent::sess_destroy();
}

}

答案 1 :(得分:1)

将在线字段更改为datetime字段,

使用您要扩展的中央控制器更新字段,或者每次有请求时使用挂钩触发字段更新(您可以将代码放入用于确保a的会话验证功能中用户在触发操作之前已登录。)

然后,您可以使用timediff SQL函数来查看用户是否处于活动状态。

答案 2 :(得分:0)

你有一个特定的问题。但我对此有一个想法。

你可以继续

  

系统/库/ session.php文件

并更新函数function sess_destroy() - 第398行

在此功能中,您可以更改数据库的状态,这样您将始终在会话销毁时更改状态。

如果您使用unset_userdata(),则需要更改同一文件中的function unset_userdata($newdata = array()行481。