Consulter un tutoriel

Offrir la déconnexion sur tous les appareils

2020-04-02 12:42:47 par François Parisien

Contexte

Nous sommes à l’air des multiples périphériques. Chaque utilisateurs est susceptible d’utiliser son téléphone portable, son ordinateur et sa tablette pour accéder à votre site web.

On ne peut donc plus gérer les sessions utilisateurs comme nous le faisions autrefois. Il faut pouvoir identifier la provenance pour donner un maximum d’option à l’utilisateur.

Qu’arrive-t’il si une connexion est active sur un appareil, dont l’utilisateur n’a plus le contrôle ?

Description du besoin

Un utilisateur ayant la possibilité de se connecter au site web doit pouvoir gérer la connexion sur les divers périphérique qu’il a utilisé. Il doit pouvoir demander à ce qu’un périphérique se déconnecte de son compte lorsque demandé.

Requis technique

  • PHP >= 7
  • MySQL >= 5.6

Connaissances requises

  • Manipuler des données dans une base de données SQL;
  • Manipuler des cookies

Description du fonctionnement

Pour parvenir à créer ce fonctionnement, il faudra revoir un peu le principe de connexion et déconnexion d’un utilisateur.

En gros, lorsque l’utilisateur voudra se connecter, on génèrera un token unique qui sera sauvegardé dans la base de données. Ce token devra être relié au compte utilisateur. On sauvegardera aussi ce token dans un cookie.

À chaque fois que l’utilisateur chargera une page, on vérifiera si ce token existe dans la base de données. Si oui, on saura que cet utilisateur est connecté à un compte spécifique.

Lorsque l’utilisateur voudra se déconnecter d’un appareil, on va effacer ce token de la base de données. Ainsi, lorsque l’appareil chargera une page, le token ne sera plus trouvé et donc, aucune connexion à un compte ne sera effectif.

Les étapes à faire

  • Créer une nouvelle table SQL. Cette table contiendra toutes les connexions. Elle devra avoir, au minimum, ces champs :
    • Token : le token unique de l’utilisateur;
    • User Id : l’Id de l’utilisateur associé à ce token. Il s’agit de l’id du compte membre ici;
    • Date de connexion : La date de la dernière utilisation du token.
  • Au moment de la connexion de l’utilisateur à son compte membre, on devra générer un token unique qu’on sauvegardera dans un cookie et qu’on sauvegardera aussi dans cette nouvelle table;
  • Lors de la déconnexion volontaire de l’utilisateur, il faudra veiller à supprimer le token de la base de données et supprimer le cookie aussi;
  • Lorsque l’utilisateur naviguera sur le site, à chaque chargement de page, il faudra analyser si le token contenu dans le cookie est toujours dans la table SQL. S’il ne l’est pas, il faudra considéré l’utilisateur comme étant un utilisateur non connecté;
  • Pour permettre à l’utilisateur de se déconnecter sur tous les appareils, on peut proposer un nouveau lien appelé « Déconnexion sur tous les appareils ». Ça sera une page, qui, une fois appelé par l’utilisateur, fera ce travail :
    • Suppression de tous les tokens relié au User Id de l’utilisateur chargeant la page;
    • Suppression du cookie;

Aller plus loin

  • On pourrait sauvegarder, dans la table des tokens, plus d’informations. Par exemple, le navigateur utilisé pour la connexion, l’IP de l’utilisateur, etc. Ensuite, il pourrait être intéressant de fournir à l’utilisateur une liste pour qu’il choisisse quel token il souhaite supprimer et ainsi, éviter d’être déconnecté partout;
  • Tant qu’à enregistrer plus de données, pourquoi ne pas notifier par courriel l’utilisateur à chaque génération d’un token ? Avec les données récupéré, il pourra savoir si une action frauduleuse se passe sur son compte ou pas;
  • Il serait intéressant aussi de faire du ménage automatique dans la table des tokens. Par exemple, une session qui est vieille d’un mois par exemple pourrait être supprimée. Cela renforcerait la sécurité et éviterait qu’une session reste ouverte trop longtemps sans activité.

À propos de l'auteur

François Parisien

Développeur PHP de métier, mais développeur PHP surtout par passion. Au début de mon adolescence, je découvre ce langage alors que j'avais soif de faire mon propre site web. C'était au tournant des années 2000. Depuis, je n'ai cessé d'apprendre. Avec le temps, j'ai touché à plusieurs outils : Wordpress, Drupal, Joomla, Symfony, Magento 1 et Magento 2. Cela m'a apporté une plus large connaissance encore. Connaissance que je vais tenter de transmettre ici.


Scroll to Top