如何在PHP中列出具有活动会话的所有活动用户名

如何在PHP中列出具有活动会话的所有活动用户名,php,session,Php,Session,在登录页面中,我将保存会话变量中登录的每个用户名: session_start (); $ _SESSION ['username'] = $ myusername; 如何在另一个PHP页面中显示活动用户的所有用户名,如: Username1, Username2, username3, username4 我应该将其存储在数据库中吗? 或者还有别的办法 请给我一个解决方案的例子,因为我是PHP新手 提前感谢:)会话绑定到您正在与之通信的客户端(它们使用名为PHPSESSID的cookie中

在登录页面中,我将保存会话变量中登录的每个用户名:

session_start ();
$ _SESSION ['username'] = $ myusername;
如何在另一个PHP页面中显示活动用户的所有用户名,如:

Username1, Username2, username3, username4
我应该将其存储在数据库中吗? 或者还有别的办法

请给我一个解决方案的例子,因为我是PHP新手


提前感谢:)

会话绑定到您正在与之通信的客户端(它们使用名为
PHPSESSID
的cookie中的cookie发送)

例如,如果您想知道每个已登录的用户,您需要在他们登录时将每个用户名插入表中

username | last_active
----------------------
Tom      | 1 sec  ago
Nick     | 5 secs ago
SELECT username FROM logged_in_users WHERE last_active < mythreshold
每当登录用户访问应用程序中的页面时,更新数据库中的
last\u active

然后,要显示所有当前登录的用户,请使用例如

username | last_active
----------------------
Tom      | 1 sec  ago
Nick     | 5 secs ago
SELECT username FROM logged_in_users WHERE last_active < mythreshold
从上次处于活动状态的登录用户中选择用户名
该会话仅在每个用户的基础上持续,您将无法在用户之间共享该信息,有几种方法可以做到这一点,但没有一种是非常干净的。您可以将其存储在数据库中,但无法知道用户何时注销。例如,如果他们关闭浏览器,则不会向服务器发出任何通知。通常,您必须通过在一个时间间隔内发送时间并将其保存在数据库中来跟踪时间,如果他们的时间没有在该时间间隔内更新,他们可能会离开。一种更干净的方法是控制会话存储,并将会话数据存储在数据库中,这样您就可以轻松地在数据库中跟踪时间,在会话文件中,您通常需要其会话ID,该ID在会话之外不可用。在DB会话中,您可以简单地按时间查询它。下面是一篇关于在DB中保存会话数据的文章,一旦您有了会话数据,只需查询哪些会话尚未过期。这也为您提供了一种更简单的方法,可以链接回DB中的用户表,因为您可以在会话表中包含用户id。根据您想要显示的内容,访问登录用户信息所需的只是一个简单的连接,正如另一条评论所述,并非所有用户都希望显示他们的在线统计数据,但这在很大程度上取决于您的使用情况。或者,只需使用Redis之类的工具,就可以省去很多麻烦。您无法跟踪他们登录的时间,你必须知道他们什么时候注销。这需要你不断更新时间,例如用户A和B登录,用户A关闭浏览器10分钟后用户B保持浏览器打开一小时,你如何区分这两个。请记住,没有向服务器发送浏览器关闭操作。@您假定每个用户的
上次活动
值低于未经验证的给定阈值。这是一种广泛使用的策略,因为让其他用户打开页面可能不安全。我在他们登录时对这篇
进行了注释,
,并且在登录用户访问页面时没有看到
。但是在任何情况下,正如我在评论中所说的,最干净的方法就是控制会话,因为它不需要额外的跟踪(因为您可以更新会话启动的时间)。这通常发生在页面重新加载时。这种方法的问题是每个用户所做的每一件事现在都有一个DB命中写入。IMO Redis将是一个更明智的方法。感谢大家的帮助,因为我现在在私人应用程序中工作,我们将在我的工作中使用它。我将使用数据库在登录时保存用户名,并在用户注销时删除它,我将从数据库中取回它,在一个页面中显示