2015-10-14 2 views
0

J'utilise Zend \ Authentication \ AuthenticationService et j'aimerais savoir qui est connecté, mais pour l'instant je ne reçois des données que pour un seul utilisateur.Zend 2: Vérifie qui est connecté en utilisant la session

Par exemple:

Sur un navigateur je me connecter comme John Doe et je reçois

PHPSESSID = abcdef1 

Sur deuxième navigateur je me connecte comme Jane Bar et je reçois

PHPSESSID = abcdef2 

Maintenant, je voudrais obtenir tous les utilisateurs connectés, quelque chose comme ceci:

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

Mais je ne peux pas trouver quelque chose à travailler

$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 
    } 

ou

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

ou

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

Aucune idée comment puis-je obtenir des informations sur tous les utilisateurs qui sont connectés, en utilisant la session du service d'authentification?

Répondre

1

Cela ne fonctionne pas de cette façon. Sur chaque machine, l'identifiant de l'utilisateur n'appartient qu'à sa session. Pour obtenir la liste des utilisateurs connectés, vous devez conserver une trace de leur dernière activité en fonction des horodatages. Ce que vous avez vraiment besoin de faire est de créer une table séparée avec les identifiants des utilisateurs et leur dernière activité, seulement de cette façon que vous sauriez qui est en ligne. Puis, lorsqu'ils effectuent une action (comme l'affichage de messages), vous mettez leur activité à jour en fonction de l'horodatage en cours.

Le tableau lui-même pourrait ressembler à ceci:

user_id | last_activity 

    2 | 144454344 
    3 | 144445346 

Puis, quand vous voudriez obtenir une liste des utilisateurs connectés, vous devez sélectionner simplement leur carte d'identité en comparant avec un horodatage + quelques secondes. Puis, connaissant les identifiants des utilisateurs dont l'horodatage n'a pas expiré, vous pouvez interroger leurs entités dans une autre table.

Comme meilleure pratique, n'écrivez pas cette logique dans les contrôleurs. Faites de votre mieux pour garder cela dans un objet de service.