检查用户是否在线(每次访问时更新活动时间)

时间:2012-09-23 19:58:46

标签: php sql codeigniter

所以基本上,我有一个cronjob,它将检查用户数据库活动时间,如果用户在最后10分钟内没有做任何事情,它将自动注销用户并将其状态设置为离线。

现在关于困难部分 - 在每个用户页面访问时,我正在对数据库进行更新,并插入新的activityTime,例如,如果他访问主页,数据库将自动更新,如果他将转到用户在线页面再次,数据库将更新ec这种情况发生在所有用户身上。

所以问题是 - 是否还有其他更好的解决方案,或者这是否足够好?

长期会造成任何麻烦,还是会降低网站速度导致数据库连接过多?

希望你明白我的意思:)!

2 个答案:

答案 0 :(得分:1)

如果您的站点登录是基于会话/ cookie的,您可以将会话/ cookie超时设置为10分钟,然后在每次有人访问新页面时更新超时/到期时间。这种方法的密集度较低,但也不像有人修改cookie那样安全。

我过去这样做了很成功。

答案 1 :(得分:1)

基本上会话持续10分钟,并在每个页面加载上发送一个简单的UPDATE并不是什么大问题。我可以向你保证,重载数据库的方法要比这更糟糕。例如,每当您需要来自用户的值时,每次都要从数据库中提取它,而不是通过cookie或全局值存储所有值。

不要担心这种方法,因为每个会话只需要多一个命令。有些代码可以在每个页面请求中运行25个不必要的查询,而无需程序员实现它。


如果您希望有一个数字说明有多少是在线的,只需通过cron运行:

$str_time = date('Y-m-d H:i:s', strtotime('-10 Minutes'));

$query = $this->db->query("
SELECT COUNT(*) AS online
FROM users
WHERE last_online >= ?
", array($str_time));

if ($query->num_rows())
    $int_online = $query->row()->online;
else $int_online = 0;

// Save into database, .json file or whatever