我想显示我的网站上所有用户都在线(实时;就像任何聊天模块一样)。我正在使用下面提到的脚本来执行此操作。
HTML:
<body onbeforeunload="Unload();" onmousedown="checkfunction();">
</body>
Javascript:
var doClose = false;
document.onkeydown = checkKeycode;
function checkKeycode(e){
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
if(keycode == 17 ){
doClose = true;
}
}
function checkfunction(){
doClose = true;
}
function Unload(){
if(!doClose){
set_user_log_out(<?php ehco $u_id ?>);
}
}
set_user_log_out
函数用于设置用户退出。
在上面提到的java脚本中,我想考虑下面提到的场景。
- 用户可能会在浏览器中打开多个选项卡。或者,他可能会打开多个浏览器(仅限同一浏览器)。
- 用户可以关闭一个选项卡并访问另一选项卡。
- 用户可能会点击一个选项卡,然后直接关闭另一个选项卡。
- 用户无需点击注销选项即可关闭浏览器。
- 用户可以使用键盘快捷键(例如ctrl + F4)关闭浏览器。
所以,我也在检查键码(使用键盘按下了哪个键)。 但是,这段代码存在一些问题。下面提到了它们。
- 我还没有找到任何解决方案来获取多个按键的键码(例如ctrl + F4)
- 考虑到两个选项卡,如果我输入其他网址(同一网站的),该页面将继续在 Firefox 中加载。
- ctrl + r 无法完全发挥作用。
- 有时,在尝试访问网站的其他页面时,它只是执行函数
set_user_log_out()
(仅发生在 Firefox 中)
请建议我为此需要什么。我还浏览了下面提到的网址。
How to Track the Online Status of Users of my WebSite?
但是上面url描述的功能没有考虑我的场景。
最佳答案
您应该在数据库中保留事件 session 列表以及上次事件时间。
在每次向服务器发出请求时,您应该更新发出请求的特定 session 的上次事件时间。 此表中的“在线用户”数量为 COUNT,比方说,最后一次事件 < 1 分钟前
在注销功能上,您还应该从此表中删除特定 session
关于javascript - 如何在我的网站中获取用户在线状态(实时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11556407/