Dans ce tutoriel je vais vous montrer comment obtenir la liste des utilisateurs connectés ou non avec Laravel et Redis.

Si vous n'utilisez pas redis pour la gestion de votre cache vous pourrez facilement modifier l'exemple qui va suivre pour l'utiliser avec d'autres drivers.

Prérequis :

  • Une installation de laravel
  • Un serveur redis
  • Connaissances de base de Php et de laravel

Récemment j'ai eu besoin de retrouver les utilisateurs en ligne sur un site après avoir fait quelques recherches j'ai vite compris que cela était très simple mais je n'ai pas trouvé d'informations sur comment le faire avec redis.

Le tuto va être en deux étapes, premièrement nous allons créer un middleware qui va stocker dans notre cache redis une valeur permettant de savoir si l'utilisateur est en ligne.

Deuxièmement nous allons retrouver les différentes valeurs mises en cache et les afficher dans notre vue.

Première étape : Création du middleware

Nous allons créer un middleware appelé "LastUserActivity" vous pouvez le faire de la manière que vous voulez personnellement je préfère utiliser les commandes :

php artisan create:middleware LastUserActivity

Voici le contenu de mon middleware : 

Middleware LastUserActivity Laravel

À l'intérieure nous avons une fonction handle qui va vérifier sur l'utilisateur est correctement authentifié. Puis si c'est le cas, elle va placer une valeur dans notre cache redis.

La valeur sera enregistrée sous cette forme "online-user-{id}" ce qui va nous permettre de la retrouver plus tard grâce à l'id de l'utilisateur.

Le second paramètre est "EX" il indique une valeur en seconde à redis, c'est le temps avant qu'expire la valeur mise en cache. Vous pouvez indiquer la valeur que vous voulez cela n'a pas d'importance, mais pour tester le tuto je vous invite à mettre environ 20 secondes.

Vous devez maintenant enregistrer votre nouveau middleware dans app/http/kenerl.php comme ci-dessous :

Cette étape permet de mettre à jour la valeur stockée dans le cache redis à chaque fois qu'un utilisateur va effectuer une action sur votre application.

Deuxième étape : Récupérer les valeurs du cache (méthode courte)

Je l'appelle la méthode courte, car nous allons directement traiter les informations dans notre vue alors que le mieux serait de créer une fonction dans un controller.

Nous verrons cette deuxième option un peu plus tard.

Voici maintenant le code que j'indique dans ma vue :

Ce code est très basique, nous utilisons un premier foreach qui va récupérer les valeurs stockées dans notre cache redis puis un second foreach qui lui va récupérer les ids des utilisateurs.

Je fais un simple str_replace qui va "supprimer" le texte "online-user-" dans les valeurs récupérées et nous retourner seulement les ids.

Vous pouvez voir que dans le second foreach je fais appel à Eloquent avec un where qui va rechercher les utilisateurs correspondants à ceux dans le cache.

Ensuite, il suffit d'afficher les informations que vous voulez, dans mon cas le nom d'utilisateur.

La méthode longue

Cette méthode est la plus adaptée elle permet d'éviter les répétitions de code et c'est plus simple à maintenir dans le temps.

Ouvrez le controller ou vous souhaitez placer votre fonction et créer une fonction qui s'appelle par exemple isOnline()

Ensuite, il ne vous reste plus qu'à faire passer votre fonction à votre vue ou à l'appeler directement dans la vue.