2015-10-14 16 views
0

我使用的是Zend \ Authentication \ AuthenticationService,我想知道誰登錄了,但現在我只能爲一個用戶獲取數據。Zend 2:檢查誰使用會話登錄

例如:

一個瀏覽器我的身份登錄李四,我得到

PHPSESSID = abcdef1 

第二瀏覽器我的身份登錄簡酒吧和我

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 
    } 

任何想法如何使用身份驗證服務的會話獲取有關全部已登錄的用戶的信息?

回答

1

這不起作用。在每臺機器上,用戶的ID只屬於他們的會話。要獲取登錄用戶的列表,您需要根據時間戳記追蹤他們的最新活動。

你真正需要做的是將創建與用戶ID和他們的最後一項活動,只有這樣,你就知道誰在線分離表。然後,當他們執行一些操作(如查看消息)時,則將其活動更新爲當前時間戳。

表本身可能是這樣的:

user_id | last_activity 

    2 | 144454344 
    3 | 144445346 

然後,當你想爲當前登錄用戶的列表,你只需選擇它們的ID與時間戳+幾秒鐘比較。然後知道時間戳未過期的用戶的id,可以在另一個表中查詢他們的實體。

作爲最佳實踐,不要在控制器中寫入該邏輯。盡你所能將其保存在服務對象中。