Zend 2:检查谁使用会话登录

Zend 2: Check who is logged using session

我正在使用 Zend\Authentication\AuthenticationService,我想知道谁登录了,但现在我只获取一个用户的数据。

例如:

one 浏览器上,我以 John Doe 身份登录,我得到

PHPSESSID = abcdef1

second 浏览器上,我以 Jane Bar 身份登录,我得到

PHPSESSID = abcdef2

现在我想获取所有登录的用户,如下所示:

    $storage = new \Zend\Session\Container('Zend_Auth');
    foreach($storage as $data)
    {
        var_dump($data); // John Doe, next Jane Bar
    }

但我什么也做不了

    $storage = new \Zend\Session\Container('Zend_Auth');
    foreach($storage->getIterator() as $data)
    {
        var_dump($data); // I get only single data depending on which browser I use
    }

//$auth = AuthenticationService()
foreach($auth->getStorage()->read() as $data)
{
    var_dump($data); // single data depending on which browser I use
}

    foreach($_SESSION['Zend_Auth'] as $session)
    {
        var_dump($session); // single data depending on which browser I use
    }

知道如何使用来自身份验证服务的会话获取有关 所有 登录用户的信息吗?

这样不行。在每台机器上,用户的 id 只属于他们的会话。要获取已登录用户的列表,您需要根据时间戳跟踪他们的最新 activity。

您真正需要做的是创建一个单独的 table,其中包含用户 ID 及其最后一个 activity,只有这样您才能知道谁在线。然后当他们执行某些操作(如查看消息)时,您将他们的 activity 更新为当前时间戳。

table 本身可能如下所示:

user_id | last_activity

   2    | 144454344
   3    | 144445346

然后,当您想要获得当前登录用户的列表时,您只需 select 他们的 ID 与时间戳 + 几秒的比较。然后知道时间戳未过期的用户 ID,您可以在另一个 table.

中查询他们的实体

作为最佳做法,不要在控制器中编写该逻辑。尽力将其保留在服务对象中。