我使用php和ajax创建了一个聊天系统。当用户登录此聊天系统时,在表is_online
字段状态更新为1.我使用此字段列出当前在线成员。
如果用户关闭我网站的所有标签而不按注销,我必须将状态更新为0。
我该怎么做?
答案 0 :(得分:2)
没有失败证明,实时,有效的方法
从理论上讲,有 NO 方式可以安全地确定浏览器的状态。有DOM onunload 或 onbeforeunload 事件等事件。可能是您可以附加一个AJAX请求作为对该事件的响应。这将设置online=0
。但问题是无法保证此事件总是会触发。 (就像当浏览器进程被杀死时会发生什么?)
唯一的标准解决方案是定期向服务器发送非常轻的AJAX请求。服务器端程序应该为每个用户维护lastSeenAtTime
字段,并在某个特定时间内没有得到请求时自动设置为零(如10分钟可能是?)
答案 1 :(得分:0)
跟踪表格中的最后一条消息/操作。要更新计数器,请仅选择那些最后一次操作不超过1分钟前的计数器。而且,如果你愿意,可以使用它的is_online,这将保持注销的轨道:)
答案 2 :(得分:0)
非常糟糕的方法。
制作包含字段online_users
和name
的表timeout
。
存储用户的名称(或ID或任何其他标识)和当前时间戳+ 5分钟(或您决定的不同阈值)。
在显示在线用户时,从该表中选择timeout
比当前时间戳更大的所有用户。
例如:
$time = time();
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'");
并设置一个CRON,每天清洁一次。
不要忘记更新timeout
。
答案 3 :(得分:-1)
我认为你应该每隔5分钟检查一次用户的活动,比如yahoo msgr,当用户关闭他的电脑雅虎显示在线状态时。但是5分钟后它显示离线。它是我的算法。我认为你不能每秒检查一次,它会缩短你的检查时间