如何找到在线用户

时间:2012-06-11 15:05:13

标签: php mysql chat

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

也许请看一下:destroy session on window close?

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

答案 2 :(得分:0)

我认为有2个解决方案。

1。)保存时间戳并制作一个cronjob。 cron每隔一分钟或两分钟检查条目的年龄,并删除较早的条目,例如5分钟。

2.。)第二种方式制作一个与Point 1相同的功能,但在每次页面调用时运行该功能。但这并不是真正有效并且会造成很大的负担。

答案 3 :(得分:0)

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