2015-10-14 3 views
0

Я использую Zend \ Authentication \ AuthenticationService, и я хотел бы знать, кто зарегистрирован, но пока я получаю данные только для одного пользователя.Zend 2: Проверить, кто зарегистрирован с использованием сеанса

Например:

На один браузер я войти, как John Doe и я получаю

PHPSESSID = abcdef1 

На второй браузере я войти, как 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 
    } 

Любая идея как я могу получить информацию о всех пользователей, которые вошли в систему, используя сеанс из службы аутентификации?

ответ

1

Это не работает. На каждой машине идентификатор пользователя принадлежит только к их сеансу. Чтобы получить список зарегистрированных пользователей, вам необходимо отслеживать их последние действия на основе временных меток.

Что вам действительно нужно сделать, так это создать разделенную таблицу с идентификаторами пользователей и их последним действием, только так вы узнаете, кто в сети. Затем, когда они выполняют какое-либо действие (например, просмотр сообщений), вы обновляете свою активность до текущей метки времени.

сама таблица может выглядеть следующим образом:

user_id | last_activity 

    2 | 144454344 
    3 | 144445346 

Затем, когда вы хотите, чтобы получить список текущих зарегистрированных пользователей, вы просто выбрать их идентификаторы, сравнивающие с меткой времени + несколько секунд. Затем, зная идентификаторы пользователей, чья временная метка не истекла, вы можете запросить их объекты в другой таблице.

Как лучше всего, не пишите эту логику в контроллерах. Сделайте все возможное, чтобы сохранить это в объекте службы.

Смежные вопросы