1

我需要向我的用户展示当前在线的其他用户我可以维护登录和注销日志,基于此我可以计算在线人数,但很多时候用户没有注销,所以我的计数无效.

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

  1. 用户刚刚登录

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

  3. 用户打开了左侧选项卡,但当前正在另一个选项卡中浏览

  4. 使用已打开选项卡,但已最小化网络浏览器

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

  1. 用户已登出;

  2. 用户 dosent 希望在线显示

  3. 用户关闭了浏览器并打开了选项卡

  4. 用户关闭浏览器

我不知道该怎么做。我在服务器端使用 php 和 mysql 和 mongo db 作为数据库,请帮助我...

提前致谢

4

2 回答 2

11

只有一种方法可以确保用户“在线”。要做到这一点,您需要了解“在线”人们通常指的是当时在线的用户;虽然检查这并不容易(甚至不可能),但检查用户是否在x一段时间内进行了任何操作非常容易,这是大多数程序员的选择。

这很容易:

  1. 您在名为 的数据库中为每个登录用户创建一个字段last_activity
  2. 每次用户访问您设置last_activity为当前time()标记的页面。
  3. 您定义用户在被视为离线$x之前可以空闲(不浏览任何新页面)的秒数。(通常是 15 分钟或 30 分钟或 1 小时)。
  4. 你做一个简单的查询,比如"SELECT * FROM users WHERE last_activity >= ". (time() - $x)
  5. $x您现在有一个在几秒钟内加载页面的用户列表。

与其他事情不同,在 PHP 和 Web 浏览器中,无法确定用户何时关闭了浏览器中的某个页面,因此从技术上讲,不可能知道用户何时关闭了浏览器窗口或退出了您的网站。

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

  1. 在用户表中创建last_activity字段(如下所示)。
  2. 创建每秒钟都y需要的 Javascript 代码(使用 AJAX) update.php(只是一个示例)。
  3. 将该 javascript 放在您网站的每个页面中(考虑y是更大的数字(< 30 秒可能不好))。
  4. 创建使用当前戳update.php更新的位置。last_activitytime()
  5. $x = $y + 1当您想找出在线人时,请执行与之前使用相同的查询。

使用最新的解决方案,您可以确保当用户不再在页面上时,他也不会运行 AJAX 调用,然后在y几秒钟内将不再被视为在线。这是一个与第一个非常相似的解决方案,但您可以设置y为小于前一个x. 通过这种方式,您可以获得有关用户浏览器窗口当前状态的更多信息,但您的数据库负载比以前要多得多。

于 2012-04-26T16:32:26.260 回答
1

几乎所有显示用户在线的网站实际上都显示“用户在最后 X 分钟内在线”。只需跟踪每个用户上次加载页面的时间,并计算在最后 X 分钟内有多少用户这样做(X 是您想要考虑的“在线”)

于 2012-04-26T16:01:31.130 回答