2

我刚遇到一个问题。我目前正在为学校做一个项目,我希望在侧边栏中拥有所有活跃用户(类似于聊天,但不是)。

首先我想到了这个(伪代码):

<?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 来做这个项目。如果这个问题已经被问过,我真的很抱歉,但我仔细搜索了所有相关问题,所有这些问题(或多或少)都与我的不同。

提前致谢 :)

4

1 回答 1

2

我认为更好的方法(也是通常使用的方法)是有一个包含两列的表。用户 ID 和用户上次在站点上处于活动状态的时间。

您会在登录时更新此表,并可能在每次用户加载页面或在网站上执行一些重要操作时保持更新。

为了显示谁在线,您可以在此表中查询在过去 N 秒/分钟内活跃的任何用户。

您可能希望添加一个“清理”作业,将用户从上次活动超过(>N)秒/分钟前的表中删除,以防止该表变得太大。

于 2013-03-11T20:19:25.110 回答