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

时间:2011-11-29 20:02:45

标签: php ajax counter

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

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

5 个答案:

答案 0 :(得分:1)

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

即使Google Analytics(新的实时版本)有时也会出错。如果你也做不到,也不要太担心。 ; - )

答案 1 :(得分:1)

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

以下是一些链接:

答案 2 :(得分:0)

据我所知,没有办法跟踪用户何时离开您的网站,缺少退出按钮(只需关闭窗口即可轻松避免)

答案 3 :(得分:0)

要扩展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分钟),如果是,则删除相应的记录。

然后您需要做的就是对表格进行简单计算,这将为您提供当前在线用户数量的合理准确表示。只需很少的编码就可以将其用于很多用途。在我创建的约会网站上,我在表格中添加了一个额外的列,并且能够在登录的用户旁边显示一个在线图标,在搜索结果中显示相同的内容,以向用户显示用户当前在线的搜索内容。有一点想象力,它可以用于更多场景。

此外,使用成员资格功能,当用户登录时,您可以更新会话表以显示它们是成员而不是来宾,如果用户注销,您可以从表中删除会话。最好的情况是,当用户注销但保留在您为其生成新会话的站点时,出于安全目的。这比你要求的要多一点。

答案 4 :(得分:0)

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

上面的解决方案将获得启用了javascript的用户数量。对于其他用户,您必须对用户将在多长时间内进行某种估计并在每次页面加载时更新该计时器。