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.
中查询他们的实体
作为最佳做法,不要在控制器中编写该逻辑。尽力将其保留在服务对象中。
我正在使用 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.
中查询他们的实体作为最佳做法,不要在控制器中编写该逻辑。尽力将其保留在服务对象中。