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

soh*_*aan 1 php ajax jquery

我需要向我的用户显示当前在线的其他用户我可以保留登录和注销日志,并且基于我可以计算在线总人数但很多时候用户不会注销,因此我的计数将无效.

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

  1. 用户刚刚登录

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

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

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

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

  1. 用户已退出;

  2. 用户dosent想要在线显示

  3. 用户在选项卡打开时关闭浏览器

  4. 用户关闭了浏览器

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

提前致谢

Sho*_*hoe 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_activity的位置time().
  5. $x = $y + 1当您想要找到在线人员时,请使用与之前相同的查询.

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