如何在PHP中实现“在线用户”功能?

4
如何使用PHP实现“在线用户”功能?当然,这涉及使用时间戳,并且在查看phpBB的会话表后,可能涉及将最新访问存储在数据库中。这是一种有效的方法,还是有更好的实现方式?编辑:我在此之前还不熟悉Stack Overflow,因此意外地将其设为了社区wiki。

为什么这是社区维基? :D - andyk
5个回答

7

使用数据库来跟踪登录用户几乎是唯一的方法。

我会将用户信息和时间戳插入表格中,或者在某个人登录时,并在每次与该用户有活动时更新时间戳。并且我会假设所有在过去5分钟内有活动的用户都是当前在线的。


每当与该用户有活动时更新时间戳,因此每次用户打开页面时,我们都会更新表格吗? - Sobiaholic

4
根据您实现会话的方式(如果您实现了会话),您可以使用相同的存储介质来获取活动用户数。例如,如果您使用基于文件的会话模型,只需扫描包含会话文件的目录并返回会话文件的数量即可。如果您使用数据库存储会话数据,则返回会话表中的行数。当然,这是假设您对会话的超时值感到满意(即,如果您的会话超时时间为30分钟,则您将获得最近30分钟内的活动用户列表)。

0

有很多实现方式。

您可以通过轮询来实现。

按照一定时间间隔检查客户端,并计算回复的客户端数量。

该值可用作在线用户数量。

我认为更好的方法是使用推送技术,而不是每隔x秒或x分钟检查在线人数。

这样只需通过事件告知服务器何时有人进入和离开即可。

因此,当客户端发出事件时,服务器只需增加和减少在线用户计数变量。

我建议您看看Socket.IO, APE等。

还有许多其他考虑的选择,如XMPP, Jabber


0

我认为你可以用PHP简单地实现它。

创建用户表,包括用户名、密码和状态(1、0)。

  1. 在登录系统中分析用户名和密码。
  2. 然后如果用户名和密码匹配,运行查询从用户表中选择并提取数据。
  3. 然后获取状态。
  4. 更新用户,将状态设置为1,表示在线。
  5. 当您点击注销时,分析会话的用户名和密码,并从tbl用户中选择查询并获取状态,然后将状态设置为0,表示离线。

0
我考虑这样做:
当用户登录时,他的用户ID和时间戳将被插入到一个表中。然后每隔5分钟,我将通过ajax调用一个php脚本来检查用户是否已登录,如果是,则更新他在表中的时间戳。
如果用户没有登录,就删除他的记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接