0

我在我的数据库中获得了一个带有“在线”字段的用户表,当用户登录时它的值是“1”,当用户注销时它变为 0。问题是,如果用户关闭选项卡并且不单击“注销”按钮,他将永远在线。

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

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

4

3 回答 3

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();
}

}
于 2015-08-24T08:59:01.333 回答
1

将在线字段更改为日期时间字段,

使用您从中扩展的中央控制器更新字段,或使用钩子在每次有请求时触发字段的更新(您可以将代码放在会话验证函数中,以确保用户登录-in 在触发动作之前)。

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

于 2013-08-04T21:55:06.373 回答
0

你有一个具体的问题。但我对此有一个想法。

你可以继续

系统/库/Session.php

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

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

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

于 2013-08-04T20:31:32.233 回答