所以基本上,我有一个cronjob,它将检查用户数据库活动时间,如果用户在最后10分钟内没有做任何事情,它将自动注销用户并将其状态设置为离线。
现在关于困难部分 - 在每个用户页面访问时,我正在对数据库进行更新,并插入新的activityTime,例如,如果他访问主页,数据库将自动更新,如果他将转到用户在线页面再次,数据库将更新ec这种情况发生在所有用户身上。
所以问题是 - 是否还有其他更好的解决方案,或者这是否足够好?
长期会造成任何麻烦,还是会降低网站速度导致数据库连接过多?
希望你明白我的意思:)!
答案 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