2

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

现在关于困难的部分 - 在每次用户页面访问时,我都会更新数据库,并插入新的活动时间,例如,如果他访问主页,数据库将自动更新,如果他会再次访问用户在线页面,数据库将更新 ec 这发生在所有用户身上。

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

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

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

4

2 回答 2

1

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

过去,我已经成功地做到了这一点。

于 2012-09-24T03:53:06.433 回答
1

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

不必担心这种方法,因为每个会话只需要多 1 个命令。一些代码可以在程序员没有意识到的情况下对每个页面请求运行 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
于 2012-09-24T08:39:38.247 回答