recherche
Maisoninterface Webtutoriel CSSDétecter les utilisateurs inactifs

Détecter les utilisateurs inactifs

La plupart du temps, vous ne vous souciez pas vraiment de savoir si un utilisateur est activement engagé ou temporairement inactif sur votre application. Inactif, ce qui signifie, peut-être qu'ils se sont levés pour prendre un verre d'eau, ou plus probablement, ont changé des onglets pour faire autre chose. Il existe cependant des situations lorsque le suivi de l'activité utilisateur et la détection de l'inactive peuvent être utiles.

Réfléchissons à quelques exemples lorsque vous pourriez avoir besoin de cette fonctionnalité:

  • Suivi du temps de lecture de l'article
  • formulaire ou document d'économie automatique
  • jeu de pause automatique
  • cache des commandes de lecteur vidéo
  • Déconnexion automatique des utilisateurs pour des raisons de sécurité

J'ai récemment rencontré une fonctionnalité qui impliquait ce dernier exemple, enregistrant automatiquement les utilisateurs inactifs pour des raisons de sécurité.

Pourquoi devrions-nous nous soucier de la déconnexion automatique?

De nombreuses applications permettent aux utilisateurs d'accéder à une certaine quantité de leurs données personnelles. Selon l'objectif de l'application, le montant et la valeur de ces données peuvent être différents. Ce n'est peut-être que le nom de l'utilisateur, mais il peut également s'agir de données plus sensibles, comme les dossiers médicaux, les dossiers financiers, etc.

Il y a des chances que certains utilisateurs oublient de se déconnecter et de laisser la session ouverte. Combien de fois vous est-il arrivé? Peut-être que votre téléphone a soudainement sonné, ou que vous deviez partir immédiatement, en laissant le navigateur. Laisser une session utilisateur ouverte est dangereux car quelqu'un d'autre peut utiliser cette session pour extraire des données sensibles.

Une façon de combattre ce problème implique le suivi si l'utilisateur a interagi avec l'application dans un certain délai, puis déclenche la déconnexion si ce temps est dépassé. Vous voudrez peut-être montrer un popover, ou peut-être une minuterie qui avertit l'utilisateur que la déconnexion est sur le point de se produire. Ou vous pouvez simplement vous connecter immédiatement lorsque l'utilisateur inactif est détecté.

En un même niveau, ce que nous voulons faire, c'est compter le temps qui est passé de la dernière interaction de l'utilisateur. Si cette période est plus longue que notre seuil, nous voulons licencier notre gestionnaire d'inactivité. Si l'utilisateur effectue une action avant que le seuil ne soit violé, nous réinitialisons le compteur et recommencez.

Cet article montrera comment nous pouvons implémenter une telle logique de suivi d'activité en fonction de cet exemple.

Étape 1: Implémentez la logique de suivi

Implémentons deux fonctions. Le premier sera responsable de la réinitialisation de notre minuterie à chaque fois que l'utilisateur interagit avec l'application, et le second gérera la situation lorsque l'utilisateur deviendra inactif:

  • ResetUserActivityTimeout - Ce sera notre méthode chargée de nettoyer le délai d'expiration existant et d'en démarrer une nouvelle chaque fois que l'utilisateur interagit avec l'application.
  • InactiveUseraction - Ce sera notre méthode qui sera licenciée lorsque le délai d'expiration de l'activité de l'utilisateur s'épuise.
 Laissez userActivityTimeout = null;

fonction resetUserActivityTimeout () {
  ClearTimeout (UserActivityTimeout);
  userActivityTimeout = setTimeout (() => {
    inactiveUseraction ();
  }, Inactive_user_time_threshold);
}

fonction inactiveUseraction () {
  // Logique de déconnexion
}

OK, nous avons donc des méthodes responsables du suivi de l'activité, mais nous ne les utilisons pas encore.

Étape 2: suivi l'activation

Nous devons maintenant implémenter des méthodes responsables de l'activation du suivi. Dans ces méthodes, nous ajoutons des auditeurs d'événements qui appellent notre méthode ResetUserActivityTimeout lorsque l'événement est détecté. Vous pouvez écouter autant d'événements que vous le souhaitez, mais pour la simplicité, nous limiterons cette liste à quelques-unes des plus courantes.

 fonction activateActivityTracker () {
  window.addeventListener ("MouseMove", ResetUserActivityTimeout);
  Window.AddeventListener ("Scroll", ResetUserActivityTimeout);
  window.addeventListener ("keydown", resetUserActivityTimeout);
  window.addeventListener ("redimensit", resetUserActivityTimeout);
}

C'est ça. Notre suivi des utilisateurs est prêt. La seule chose que nous devons faire est d'appeler l'activatActivityTracker sur notre chargement de page.

Nous pouvons le laisser comme ça, mais si vous regardez de plus près, il y a un grave problème de performances avec le code que nous venons de commander. Chaque fois que l'utilisateur interagit avec l'application, toute la logique s'exécute. C'est bien, mais regardez de plus près. Il existe certains types d'événements qui sont tirés énormément de fois où l'utilisateur interagit avec la page, même si ce n'est pas nécessaire pour notre suivi. Regardons l'événement Mousemove. Même si vous déplacez votre souris juste une touche, l'événement Mousemove sera licencié des dizaines de fois. C'est un véritable tueur de performance. Nous pouvons traiter ce problème en introduisant un lirte qui permettra à la logique d'activité de l'utilisateur une seule fois par période spécifiée.

Faisons ça maintenant.

Étape 3: Améliorer les performances

Tout d'abord, nous devons ajouter une autre variable qui conservera la référence à notre délai d'expiration de ThrotTler.

 Laissez userActivityThrotTlertimeout = null

Ensuite, nous créons une méthode qui créera notre grottler. Dans cette méthode, nous vérifions si le délai d'expiration de ThrotTler existe déjà, et si ce n'est pas le cas, nous en créons un qui tirera le resetUserActivityTimeout après une période de temps spécifique. C'est la période pour laquelle toute activité utilisateur ne déclenchera plus la logique de suivi. Après ce temps, le délai d'expiration de Throttler est effacé, permettant à l'interaction suivante de réinitialiser le tracker d'activité.

 userActivityThrotTler () {
  if (! userActivityThrotTlertimeout) {
    userActivityThrotTlertimeout = setTimeout (() => {
      resetUserActivityTimeout ();

      ClearTimeout (UserActivityThrotTLerTimeout);
      UserActivityThrotTLerTimeout = null;
    }, User_activity_throttler_time);
  }
}

Nous venons de créer une nouvelle méthode qui devrait être licenciée sur l'interaction de l'utilisateur, nous devons donc nous rappeler de changer les gestionnaires d'événements de ResetUserActivityTimeout à UserActivityThrottler dans notre logique activée.

 activateActivityTracker () {
  window.addeventListener ("MouseMove", UserActivityThrotTler);
  // ...
}

Bonus: Revuons-le!

Maintenant que nous avons notre logique de suivi d'activité implémentée, voyons comment peut déplacer cette logique vers une génération d'application avec Vue. Nous baserons l'explication de cet exemple.

Nous devons d'abord déplacer toutes les variables dans les données de notre composant, c'est l'endroit où vivent tous les accessoires réactifs.

 Exporter par défaut {
  données() {
    retour {
      isinactive: faux,
      userActivityThrotTlertimeout: null,
      UserActivityTimeout: null
    };
  },
// ...

Ensuite, nous déplaçons toutes nos fonctions vers des méthodes:

 // ...
  Méthodes: {
    activateActivityTracker () {...},
    resetUserActivityTimeout () {...},
    userActivityThrotTler () {...},
    inactiveUseraction () {...}
  },
// ...

Puisque nous utilisons VUE et son système réactif, nous pouvons supprimer toutes les manipulations DOM directes i. (C'est-à-dire document.getElementyId ("app"). InnerHTML) et dépendre de notre propriété de données isinactive. Nous pouvons accéder à la propriété de données directement dans le modèle de notre composant comme ci-dessous.

 <mpelate>
  <div>
    <p> L'utilisateur est inactif = {{isInactive}} </p>
  </div>
 template></mpelate>

La dernière chose que nous devons faire est de trouver un endroit approprié pour activer la logique de suivi. Vue est livré avec des crochets de cycle de vie des composants qui sont exactement ce dont nous avons besoin - en particulier le crochet BeforeMount. Alors mettons-le là.

 // ...
  beForMount () {
    this.activateActivityTracker ();
  },
// ...

Il y a encore une chose que nous pouvons faire. Étant donné que nous utilisons des délais d'attente et enregistrons des auditeurs d'événements sur la fenêtre, c'est toujours une bonne pratique de nettoyer un peu après nous-mêmes. Nous pouvons le faire dans un autre crochet de cycle de vie, Beforestroy. Supprimons tous les auditeurs que nous avons enregistrés et effacés tous les temps morts lorsque le cycle de vie du composant se termine.

 // ...
  beforestroy () {
    Window.RemoveEventListener ("MouseMove", this.UserActivityThrotTler);
    Window.RemoveEventListener ("Scroll", this.UserActivityThrotTler);
    Window.RemoveEventListener ("Keydown", this.UserActivityThrotTler);
    Window.RemoveEventListener ("redimensionner", this.UserActivityThrotTler);
  
    ClearTimeout (this.UserActivityTimeout);
    ClearTimeout (this.UserActivityThrotTLerTimeout);
  }
// ...

C'est une enveloppe!

Cet exemple se concentre uniquement sur la détection de l'interaction de l'utilisateur avec l'application, la réagissant et le licenciement d'une méthode lorsqu'aucune interaction n'est détectée dans un délai spécifique. Je voulais que cet exemple soit aussi universel que possible, c'est pourquoi je laisse l'implémentation de ce qui devrait se passer lorsqu'un utilisateur inactif qu'il vous a détecté.

J'espère que vous trouverez cette solution utile dans votre projet!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Actualités hebdomadaires de la plate-forme: applications Web dans Galaxy Store, histoires tappables, sous-réseau CSSActualités hebdomadaires de la plate-forme: applications Web dans Galaxy Store, histoires tappables, sous-réseau CSSApr 14, 2025 am 11:20 AM

En cette semaine, Roundup: Firefox Gains Gains Loksmith Powers, Samsung & # 039; S Galaxy Store commence à prendre en charge les applications Web progressives, CSS Sous-Grid est expédié dans Firefox

Actualités hebdomadaires de la plate-forme: mode explorateur Internet, rapport de vitesse dans la console de recherche, restreindre les invites de notificationActualités hebdomadaires de la plate-forme: mode explorateur Internet, rapport de vitesse dans la console de recherche, restreindre les invites de notificationApr 14, 2025 am 11:15 AM

Dans cette semaine, Roundup: Internet Explorer trouve son chemin, Google Search Console vante un nouveau rapport de vitesse et Firefox donne la notification de Facebook

La puissance (et le plaisir) de la portée avec les propriétés personnalisées CSSLa puissance (et le plaisir) de la portée avec les propriétés personnalisées CSSApr 14, 2025 am 11:11 AM

Vous êtes probablement déjà au moins un peu familier avec les variables CSS. Sinon, voici un aperçu de deux secondes: ils sont vraiment appelés propriétés personnalisées, vous définissez

Nous sommes programmeursNous sommes programmeursApr 14, 2025 am 11:04 AM

La construction de sites Web est la programmation. L'écriture de HTML et CSS est la programmation. Je suis programmeur, et si vous êtes ici, en lisant CSS-Tricks,

Comment supprimer le CSS inutilisé d'un site?Comment supprimer le CSS inutilisé d'un site?Apr 14, 2025 am 10:59 AM

Voici ce que j'aimais ce que je vous aime à l'avant: c'est un problème difficile. Si vous avez atterri ici parce que vous espérez être pointé sur un outil que vous pouvez exécuter qui indique

Une introduction à l'API Web d'image dans l'imageUne introduction à l'API Web d'image dans l'imageApr 14, 2025 am 10:57 AM

Image-in-Picture a fait sa première apparition sur le Web dans le navigateur Safari avec la sortie de MacOS Sierra en 2016. Il a permis à un utilisateur de faire éclater

Façons d'organiser et de préparer des images pour un effet flou à l'aide de GatsbyFaçons d'organiser et de préparer des images pour un effet flou à l'aide de GatsbyApr 14, 2025 am 10:56 AM

Gatsby fait un excellent traitement et la gestion des images. Par exemple, cela vous aide à gagner du temps avec l'optimisation de l'image parce que vous n'avez pas à

Oh hé, le pourcentage de rembourrage est basé sur la largeur de l'élément parentOh hé, le pourcentage de rembourrage est basé sur la largeur de l'élément parentApr 14, 2025 am 10:55 AM

J'ai appris quelque chose sur le rembourrage basé sur le pourcentage (%) aujourd'hui que j'avais totalement tort dans ma tête! J'ai toujours pensé que le pourcentage de rembourrage était basé sur le

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

DVWA

DVWA

Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel