【问题标题】:How to get the user online status (real time) in my website如何在我的网站中获取用户在线状态(实时)
【发布时间】:2012-07-18 09:01:24
【问题描述】:

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

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
  • 考虑到两个选项卡,如果我键入其他 url(同一站点的),页面会继续在 firefox 中加载。
  • ctrl + r 不能完全工作。
  • 有时在尝试访问站点的其他页面时,它只是执行函数set_user_log_out()(仅在 Firefox 中发生)

请建议我为此需要什么。我也浏览了下面提到的网址。

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

但是上面网址描述的功能没有考虑我的场景。

【问题讨论】:

    标签: javascript php jquery session dom-events


    【解决方案1】:

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

    在对服务器的每个请求上,您都应该更新发出请求的特定会话的上次活动时间。 “在线用户”在此表上有 COUNT 个,比如说,上次活动

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

    【讨论】:

    • "活动会话"..假设我打开了两个选项卡并从一个选项卡中单击了“注销”选项,情况会怎样?
    • 如果它是同一个用户(同一个会话)而不是用户在这两个过程中注销 - 如果用户仍然登录,你应该每 X 秒添加检查 - 如果没有 - 将用户重定向到登录页面
    • 并且,假设登录的用户只是关闭了浏览器(没有点击注销选项)。那么,将检索哪个状态(可用/注销)以及如何检索?
    • 当用户关闭窗口时,他将不再发送活动(因此您不会更新数据库中的 last_activity 字段)。一分钟后,他的 last_activity 将超过 1 分钟,因此应视为已注销。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我有一个 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>)");
               }
         });
         })
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-08
        • 2019-03-04
        • 1970-01-01
        • 1970-01-01
        • 2017-05-25
        • 2011-10-25
        • 2011-02-12
        • 1970-01-01
        • 2011-09-06
        相关资源
        最近更新 更多