如何显示当前有多少用户在线

时间:2012-04-26 15:58:10

标签: php ajax jquery

我需要向我的用户显示当前在线的其他用户我可以维护登录和注销日志,并且根据我可以计算在线总人数但很多时候用户不会注销,所以我的计数会无效。

以下是显示用户在线的标准:

  1. 用户刚刚登录

  2. 用户当前正在查看该页面

  3. 用户已打开左侧标签但当前正在另一个标签页中浏览

  4. 使用标签打开但已最小化网络浏览器

  5. 以下是不应在线显示使用的标准

    1. 用户已退出;

    2. 用户剂量想要在线显示

    3. 用户在标签打开时关闭了浏览器

    4. 用户关闭了浏览器

    5. 我不知道怎么继续这个。我在服务器端使用php,mysql和mongo db作为数据库 请帮帮我...

      提前致谢

2 个答案:

答案 0 :(得分:10)

只有一种方法可以确定用户是“在线”。要实现这一目标,您需要了解“在线”用户通常会在那个时刻将用户称为在线;虽然检查这不容易(甚至不可能),但检查用户是否在x时间内做出任何动作非常容易,而且这是大多数程序员的选择。

这很简单:

  1. 您可以在名为last_activity的数据库中为每个登录用户创建一个字段。
  2. 每次用户访问某个页面时,您都会将last_activity设置为当前的time()标记。
  3. 您可以在被视为离线之前定义用户可以空闲(不浏览任何新页面)的$x秒数。 (通常为15分钟或30分钟或1小时)。
  4. 您执行"SELECT * FROM users WHERE last_activity >= ". (time() - $x)
  5. 等简单查询
  6. 您现在拥有一个已在$x秒内加载页面的用户列表。
  7. 与其他东西不同,在PHP和网络浏览器中,无法确定用户是否在浏览器中关闭了您的某个页面,因此无论何时用户关闭浏览器窗口或退出您的页面,都无法知道网站。

    顺便说一句,我撒谎,有一种方法,但它真的很贵,所以请多多想一想,因为它可能会使服务器崩溃或类似的事情:

    1. 在用户表格中创建last_activity字段(如下所示)。
    2. 创建每y秒需要update.php的Javascript代码(使用AJAX)(仅举例)。
    3. 将该javascript放在您网站的每个页面中(考虑y是您可以使用的更大数字(< 30秒可能不好)。)
    4. 使用当前update.php标记更新last_activity,创建time()
    5. 当您想要找到在线人员时,使用$x = $y + 1执行与之前相同的查询。
    6. 使用最新的解决方案,您可以确定当用户不再在页面上时,他也没有运行AJAX调用,然后在y秒内它将不会在线考虑了。它与第一个解决方案非常相似,但您可以将y设置为小于之前的x。通过这种方式,您可以获得有关用户浏览器窗口当前状态的更多信息,但您拥有的数据库负载比以前多得多。

答案 1 :(得分:1)

几乎所有在线显示用户的网站实际上都会在最后X分钟内显示"用户在线#34;只需跟踪每个用户上次加载页面的时间,并计算最近X分钟内用户的数量(X是您想要考虑的任何内容"在线")