-1

我正在为我的网站聊天。为此,我需要找出有多少注册用户在线。我计算会话的数量并将它们存储在一个表中。当他们注销时,他们的名字将从该表中删除。现在,如果他们不单击注销并直接关闭其选项卡,则不会使他们下线。他们的名字仍然存在于表中。所以为了去除它们,我在网上找到了一个非常复杂的算法。它每五分钟清空一次该表,然后再次添加在线人员的姓名。但问题是,当这种情况发生时,聊天被打断了。所以我需要一个解决这个问题的方法

4

4 回答 4

4

为“上次活动”添加一列。每次用户执行某些操作(例如,可能包括浏览器通过 AJAX 轮询更多消息)时,您将该列更新为NOW(). 然后,您查找活跃用户的查询可能类似于:

SELECT user.name FROM user
    WHERE DATE_ADD(user.last_active, INTERVAL 5 MINUTE) >= NOW();

从表中删除旧记录很好,但可能是可选的增强功能(取决于站点负载)。

于 2012-06-11T15:08:22.113 回答
1

也许看看这个:在窗口关闭时销毁会话?

您可以执行删除该行的查询,而不是破坏会话。

于 2012-06-11T15:09:18.503 回答
0

我认为有2个解决方案。

1.) 保存时间戳并进行 cronjob。例如,cron 每分钟或每 2 分钟检查一次条目的存在时间,并删除超过 5 分钟的条目。

2.) 第二种方法做一个与第 1 点相同的功能,但在每个页面调用时运行该功能。但这并不是很有效并且会产生很多负载。

于 2012-06-11T15:08:37.257 回答
0

如果您将会话存储在 db 表中,您可以轻松检查活动会话,请查看 php 手册http://in.php.net/manual/en/function.session-set-save-handler.php

于 2012-06-11T15:46:39.873 回答