javascript - 如何在我的网站中获取用户在线状态(实时)

标签 javascript php jquery session dom-events

我想显示我的网站上所有用户都在线(实时;就像任何聊天模块一样)。我正在使用下面提到的脚本来执行此操作。

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脚本中,我想考虑下面提到的场景。

  1. 用户可能会在浏览器中打开多个选项卡。或者,他可能会打开多个浏览器(仅限同一浏览器)。
  2. 用户可以关闭一个选项卡并访问另一选项卡。
  3. 用户可能会点击一个选项卡,然后直接关闭另一个选项卡。
  4. 用户无需点击注销选项即可关闭浏览器。
  5. 用户可以使用键盘快捷键(例如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/

相关文章:

php - PHP 中 MySQL 中两个时间的差异

javascript - jQuery 加载跟踪像素并在重定向之后

jquery - 在 iPhone 上的 Web 应用程序中维护 PHP session

javascript - 从数据列表中动态删除项目

javascript - 正则表达式选择双引号之间的特定字符

javascript - 对于无渲染组件, enzyme 浅层返回未定义

javascript - 如何使用父数组和嵌套数组进行 _.flatten ? (洛达什)

php - 从 php 运行控制台应用程序

php - 禁用 SonataUserBundle sonata.user.admin.group 服务

javascript - Gridview文本框焦点位于verticle中