2012-07-18 14 views
-2

我创建了一个使用php和ajax的聊天系统。当用户登录到此聊天系统时,在表is_online字段状态已更新为1.我正在使用此字段列出当前在线成员。如何获取在线用户的确切数量在php聊天系统?

我要更新状态为0;如果用户关闭我的网站的所有标签不按注销

我该怎么办?

+0

看看这个:http://stackoverflow.com/questions/1619930/how-to-check-users-leave-a-page – Peon 2012-07-18 11:47:32

+0

可能的重复[当用户离开网页时检测的最佳方式] (http://stackoverflow.com/questions/147636/best-way-to-detect-when-user-leaves-a-web-page) – JMax 2012-07-19 09:19:16

回答

0

真的很糟糕的方法。


做一个表online_users与领域nametimeout。 存储用户的姓名(或ID,或任何其他标识)和当前时间戳+5分钟(或您决定的不同阈值)。

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

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

并成立了一个cron,将擦桌子,每天一次。

并且不要忘记更新timeout

-1

我想你应该每5分钟检查一次用户的活动,例如当用户关闭他的电脑时雅虎msgr显示雅虎显示在线状态yet.but 5分钟后其显示脱机。其我的算法。我认为你不能检查每一秒,它延迟了你的检查时间

0

保持表中最后一条消息/动作的轨迹。要更新计数器,请仅选择那些最后一次操作不超过1分钟前的操作。而且,如果你愿意,使用is_online它这将保持注销:)

2

的轨道没有失败证明,REALTIME,高效方法

从理论上讲有NO方式安全地确定浏览器的状态。有事件如DOM onunloadonbeforeunload event。也许你可以附加一个AJAX请求作为对该事件的回应。这将设置online=0。但问题是不能保证这个事件总是会发生。 (就像浏览器的进程被终止时发生的情况一样)

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