我创建了一个使用php和ajax的聊天系统。当用户登录到此聊天系统时,在表is_online
字段状态已更新为1.我正在使用此字段列出当前在线成员。如何获取在线用户的确切数量在php聊天系统?
我要更新状态为0;如果用户关闭我的网站的所有标签不按注销。
我该怎么办?
我创建了一个使用php和ajax的聊天系统。当用户登录到此聊天系统时,在表is_online
字段状态已更新为1.我正在使用此字段列出当前在线成员。如何获取在线用户的确切数量在php聊天系统?
我要更新状态为0;如果用户关闭我的网站的所有标签不按注销。
我该怎么办?
真的很糟糕的方法。
做一个表online_users
与领域name
和timeout
。 存储用户的姓名(或ID,或任何其他标识)和当前时间戳+5分钟(或您决定的不同阈值)。
显示在线用户时,请从该表中选择所有timeout
比当前时间戳更大的用户。 例子:
$time = time();
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'");
并成立了一个cron,将擦桌子,每天一次。
并且不要忘记更新timeout
。
我想你应该每5分钟检查一次用户的活动,例如当用户关闭他的电脑时雅虎msgr显示雅虎显示在线状态yet.but 5分钟后其显示脱机。其我的算法。我认为你不能检查每一秒,它延迟了你的检查时间
保持表中最后一条消息/动作的轨迹。要更新计数器,请仅选择那些最后一次操作不超过1分钟前的操作。而且,如果你愿意,使用is_online它这将保持注销:)
的轨道没有失败证明,REALTIME,高效方法
从理论上讲有NO方式安全地确定浏览器的状态。有事件如DOM onunload或onbeforeunload event。也许你可以附加一个AJAX请求作为对该事件的回应。这将设置online=0
。但问题是不能保证这个事件总是会发生。 (就像浏览器的进程被终止时发生的情况一样)
唯一的标准解决方案是定期向服务器发送非常轻的AJAX请求。服务器端程序应该为每个用户维护lastSeenAtTime
字段,并且在某些特定时间内没有得到请求时(如10分钟可能会自动设置为零)
看看这个:http://stackoverflow.com/questions/1619930/how-to-check-users-leave-a-page – Peon 2012-07-18 11:47:32
可能的重复[当用户离开网页时检测的最佳方式] (http://stackoverflow.com/questions/147636/best-way-to-detect-when-user-leaves-a-web-page) – JMax 2012-07-19 09:19:16