检测在线用户?

时间:2010-11-01 21:41:59

标签: php

我不确定最简单的方法是什么。我需要能够检测到我的网站上的用户在线。因此,当人们查看某个帖子或其他内容时,如果他们在线或离线,则会在用户名旁边说。在论坛索引的底部,它会说出所有在线用户。

做这样的事情最简单的方法是什么?我不确定我是否需要一个每次加载页面时都会运行的Javascript。

谢谢:)

4 个答案:

答案 0 :(得分:24)

  • 拥有一个带有用户表的MySQL数据库
  • 在该用户表中有一列保存了“上次见过的”时间
  • 在每个页面请求上更新该列
  • 在线或离线检查时,检查当前时间减去“上次看见”时间是否大于您喜欢的某个阈值

编辑:你可以选择每隔两分钟左右对一个javascript“ping”服务器(请求一个空页面),如果你想让你的网站空闲的人也可以在线显示。

答案 1 :(得分:2)

一种方法是将用户会话存储在数据库或其他存储中,例如memchached(或理想情况下都是What is the best way to handle sessions for a PHP site on multiple hosts?)。然后,您只需在商店中查找用户,看看他们的会话是否仍处于活动状态。

这样的解决方案:http://pureform.wordpress.com/2009/04/08/memcache-mysql-php-session-handler/

答案 2 :(得分:1)

您需要持有某种“会话”表,您可以在其中保存用户以及他们访问页面的时间。

如果时间早于5分钟,则用户离线(并且可以删除该行)。 会话表中的其他用户是“在线”。

答案 3 :(得分:0)

首先,无法准确获取当前在线用户的数量。您能做的最好的就是得到一个大概的数字。

请考虑这种情况:用户登录到您的网站,单击某些链接,然后仅关闭浏览器选项卡而不注销。其实这很普遍。您的服务器永远不知道有用户关闭浏览器,因此,如果该会话存储在服务器上,则该用户的会话将保持活动状态一段时间(可能为30分钟)。

在Ruby on Rails应用程序之类的无状态Web应用程序中,会话完全存储在浏览器端(在cookie中),并且服务器在每次请求后完全忘记了用户,这使得在线用户的计数几乎变得不可能。这是对简单性和可伸缩性的权衡。

那么我们如何获得这样的数字?我们必须基于妥协做出假设。我们假设如果用户的上次请求是在30分钟前完成的,则该用户在线,那么我们可以通过跟踪上次请求的时间戳来获取“在线”用户数每个用户都能做到。或者我们可以假设如果用户在服务器上的会话仍然在线,则该用户在线,然后计算服务器上的会话。无论哪种方式,我们都必须说服自己,“晃动的会话”的数量可以忽略不计(我知道这很难)。