我的数据库上有一个用户表,其中包含“在线”字段,当用户登录时,它获得值“1”,并在用户注销时更改为0。问题是如果用户关闭标签而没有点击“注销”按钮,他将永远保持在线状态。
所以我想挂钩某种功能,所以当会话到期时,它会将这个“在线”字段的值 - 在数据库上 - 更改为“0”。
我当然愿意接受建议,因为我不知道什么是正确的方法。
答案 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。