我刚刚遇到了一个问题。我目前正在为学校开发一个项目,我希望所有活跃用户都在侧边栏中(类似于聊天,但事实并非如此)。
首先我想到了这个(伪代码):
<?php
...
class user {
//Some instance vars.
public function __construct(){
//Write username in a textfile/database
}
public function logout {
//Delete username from textfile/database
}
}
...
?>
问题是:
1) 用户对象存储在$_SESSION[]
数组中。所以我不能使用魔术方法__destruct()
。这就是我创建 logout()
方法的原因。 (问题已解决^^)
2) 如果我们假设用户使用相同的 ID 在 2 台设备(例如笔记本电脑、智能手机)上登录,并且他在一台设备上退出 session ,则另一台设备也将被删除。
3) 用户可能不想按注销,而是只是关闭浏览器窗口。我怎么知道他已注销/退出 session 。
我知道,PHP 不是执行此类任务的最佳编程语言,但我真的很想用 PHP 来完成这个项目。如果这个问题已经被问过,我真的很抱歉,但我仔细搜索了所有相关问题,所有这些问题(或多或少)都与我的有所不同。
提前致谢:)
最佳答案
我认为一种更好的方法(也是通常采用的方法)是拥有一个包含两列的表。用户 ID 以及用户上次在网站上事件的时间。
您需要在登录时以及每次用户加载页面或在网站上执行某些重要操作时保持此表最新。
要显示谁在线,您可以查询此表以查找在过去 N 秒/分钟内处于事件状态的所有用户。
您可能希望添加一个“清理”作业,将上次事件时间超过(>N)秒/分钟前的用户从表中删除,以防止该表变得太大。
关于PHP:活跃用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347723/