我刚遇到一个问题。我目前正在为学校开展一个项目,我希望在补充工具栏中拥有所有活跃用户(类似于聊天,但事实并非如此)。
首先我想到了这个(Pseudocode):
<?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台设备(例如笔记本电脑,智能手机),并且他在一台设备上退出会话,则另一台设备也将被删除。
3)用户可能不想按下注销但只关闭浏览器窗口。我怎么知道,他退出/退出了会议。
我知道,PHP不是这类任务的最佳编程语言,但我真的想用PHP做这个项目。我很抱歉,如果已经提出这个问题,但我仔细搜索了所有相关问题,并且所有这些问题都与我的不同(或多或少)。
提前致谢:)
答案 0 :(得分:2)
我认为更好的方法(以及通常采用的方法)是拥有一个包含两列的表。用户ID以及用户在网站上活动的最后时间。
您可以在登录时保持此表的最新状态,并且可能每次用户加载页面或在网站上执行某些重要操作时都会更新。
要显示谁在线,您可以在此表中查询在过去N秒/分钟内处于活动状态的所有用户。
您可以选择添加一个“清理”作业,该作业将用户从其最后一次活动超过(某些&n; N)秒/分钟前的表中移除,以防止该表变得太大。