Ajax/Php -实时在线用户计数器


Ajax/Php - Real Time Online User Counter

我想有一个在线用户计数器,但它执行实时。我的意思是当有人进来时,计数器更新,或者当有人离开网站时,计数器减少。

我在网上找不到这样的东西。这有什么脚本吗?

您可以在数据库中保存所有会话的列表,并在每次有人点击页面时更新"在线时间"。然后检查在最近x分钟内更新了多少会话。然而,这不会是非常实时的:根据您定义的分钟数,它会有一点偏离。

即使是谷歌分析(新的实时版本)有时也会出错。如果你做不好也不要太过担心。: -)

您应该看看WebSocket。有很多演示,主要是实时聊天应用,你可以在上面做点什么:)在我看来,WebSocket在你的情况下似乎有点开销(你只是想要一个数字,没有真正的双向通信),但它是做"实时"应用程序的好方法。

以下是一些链接:

  • 插座。IO (node.js后端)
  • WebSocket和Socket。IO
  • 服务器发送事件介绍(另一种技术)
  • phpwebsocket

据我所知,没有办法跟踪用户何时离开你的网站,除非有注销按钮(这可以通过简单地关闭窗口来避免)

要扩展Tom的回答,可以创建一个表来跟踪数据库中的会话。字段至少应该是session_id, ip_address, activity_time。你想给他们起什么名字都行。您将需要一个函数,在每次页面加载时执行与session_id和ip_address上的记录匹配的函数。如果匹配的记录不存在,则创建一个;如果匹配,则更新时间。

注意事项:

1)获得正确的ip地址可能很棘手,特别是对于AOL用户和/或代理用户。您需要查找X_Forwarded_For标头。如果存在,则使用该地址,否则使用$_SERVER['REMOTE_ADDR']。我建议查找X_Forwarded_For设置,因为我不确定它是否适用于所有设置

1a)如果你没有得到正确的IP地址,一些用户会在每个页面上创建一个新的条目

2)你需要一种方法来删除陈旧的会话。我建议作为更新活动时间的函数的一部分,它还检查任何大于5分钟的activity_time(我使用15分钟),如果是,则删除相应的记录。

那么您所需要做的就是在表格上进行简单的计数,这将为您提供当前在线用户数量的合理准确表示。只需编写很少的代码,您就可以将其用于很多用途。在我创建的一个约会网站上,我在表中添加了一个额外的列,这样就可以在登录的用户旁边显示一个在线图标,在搜索结果中也一样,向正在搜索的用户显示当前在线的用户。只要有一点想象力,它可以被用于更多的场景。

此外,通过成员特性,当用户登录时,您可以更新会话表以显示他们是成员而不是访客,如果用户注销,您可以从表中删除会话。出于安全考虑,当用户注销但仍留在站点上时,最好为他们生成一个新会话。

您让浏览器为您的服务器打开一个HTTP连接,以获取一些服务器从未响应的未使用的资源(如/usercounter)。然后计算打开的连接的数量。您可以让请求发送一个与用户会话相关联的cookie,这样您就可以知道连接是否都是唯一的用户。这个解决方案非常困难,您可能找不到任何现成的解决方案来实现它。

上面的解决方案将获得启用javascript的用户计数。对于其他用户,您必须对用户停留的时间进行某种猜测,并在每次加载页面时更新计时器。