我在我的数据库中获得了一个带有“在线”字段的用户表,当用户登录时它的值是“1”,当用户注销时它变为 0。问题是,如果用户关闭选项卡并且不单击“注销”按钮,他将永远在线。
所以我想挂钩某种函数,这样当会话到期时,它会将数据库上的“在线”字段的值更改为“0”。
我当然愿意接受建议,因为我不知道什么是正确的方法。
我在我的数据库中获得了一个带有“在线”字段的用户表,当用户登录时它的值是“1”,当用户注销时它变为 0。问题是,如果用户关闭选项卡并且不单击“注销”按钮,他将永远在线。
所以我想挂钩某种函数,这样当会话到期时,它会将数据库上的“在线”字段的值更改为“0”。
我当然愿意接受建议,因为我不知道什么是正确的方法。
您可以通过扩展 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();
}
}
将在线字段更改为日期时间字段,
使用您从中扩展的中央控制器更新字段,或使用钩子在每次有请求时触发字段的更新(您可以将代码放在会话验证函数中,以确保用户登录-in 在触发动作之前)。
然后您可以使用 timediff SQL 函数来查看用户是否处于活动状态。
你有一个具体的问题。但我对此有一个想法。
你可以继续
系统/库/Session.php
并更新函数function sess_destroy()
- 第 398 行
在此功能中,您可以更改数据库的状态,这样您在会话销毁时总是会更改状态。
如果使用unset_userdata()
,则需要更改function unset_userdata($newdata = array()
同一文件上的功能行 481。