-2

我使用 php 和 ajax 创建了一个聊天系统。当用户登录到这个聊天系统时,in tableis_online字段状态会更新为 1。我正在使用此字段列出当前在线成员。

如果用户在不按注销的情况下关闭我网站的所有选项卡,我必须将状态更新为 0 。

我该怎么做?

4

4 回答 4

2

没有故障证明,实时,有效的方法

从理论上讲,没有办法安全地确定浏览器的状态。有诸如 DOM onunloadonbeforeunload事件之类的事件。可能您可以附加一个 AJAX 请求作为对该事件的响应。那将设置online=0。但问题是不能保证这个事件会一直触发。(比如浏览器进程被杀死时会发生什么?)

唯一的标准解决方案是定期向服务器发送非常轻量的 AJAX 请求。服务器端程序应该为每个用户维护该lastSeenAtTime字段,并在某个特定时间(可能是 10 分钟?)内没有收到请求时自动设置为零

于 2012-07-18T11:51:28.863 回答
0

跟踪表中的最后一条消息/操作。要更新计数器,只选择他们最后一次操作不超过 1 分钟前的那些。而且,如果你愿意,可以使用 is_online 来跟踪注销:)

于 2012-07-18T11:48:02.927 回答
0

真是糟糕的方法。


online_users用字段name和制作一个表格timeout。存储用户名(或 ID,或任何其他标识)和当前时间戳 + 5 分钟(或不同的阈值,由您决定)。

显示在线用户时,从该表中选择timeout比当前时间戳大的所有用户。例子:

$time = time();
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'");

并设置一个每天清洁一次桌子的 CRON。

并且不要忘记更新timeout

于 2012-07-18T11:51:40.460 回答
-1

我认为您应该每 5 分钟检查一次用户的活动,例如,当用户关闭计算机时,雅虎显示在线状态,但 5 分钟后显示离线。这是我的算法。我认为你不能每秒检查一次,而且检查时间有延迟

于 2012-07-18T11:44:16.687 回答