如何在我的网站上获得用户在线状态(实时)

时间:2012-07-19 08:02:57

标签: php javascript jquery session javascript-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)。
  6. 所以,我正在检查键码(使用键盘按下了哪个键)。 但是,此代码存在一些问题。在下面提到它们。

    • 我没有找到任何解决方案来获取多个键的键码(例如.ctrl + F4)
    • 考虑两个标签,如果我输入其他网址(同一网站的网址),该页面会继续加载到Firefox中。
    • ctrl + r无法完全正常工作。
    • 有时在尝试访问网站的其他页面时,它只执行函数'set_user_log_out()'(仅在firefox中发生)

    请建议我需要这个。我也经历了下面提到的网址。

    How to Track the Online Status of Users of my WebSite?

    但上面url中描述的功能并不考虑我的场景。

    提前致谢。

3 个答案:

答案 0 :(得分:2)

您应该在上次活动时保留数据库中的活动会话列表。

在每个服务器请求上,您应该更新发出请求的特定会话的最后活动时间。 “在线用户”在此表上是COUNT,例如,上次活动&lt; 1分钟前

在注销功能上,您还应该从此表中删除特定会话

答案 1 :(得分:0)

为了让Jerzy给你“实时”这个想法,你需要添加一些ajax。使用ajax,您可以在不离开页面的情况下查看在线用户。此外,您可以向数据库添加离开状态,这意味着:检查用户是否仍在页面上但不执行任何操作等。这是一种非常简单的方法:)

答案 2 :(得分:0)

我有一个PHP脚本,将所有在线用户存储在json文件中...而不是使用jquery将每个用户存储在li-table中

function getAllUsers(){
  $.getJSON('online.php',function(data){
   $.each(data, function(i, data){
        if(data.user_status == 'online') {
          $("#online-user")
          .append("<tr><td>" + data.user_id + "</td><td>"
                  + data.user_name + "</td><td>"
                  + data.user_status + "</td></tr>)");
         }
   });
   })
}