Question

J'apporte des modifications à un site basé sur des membres dont le propriétaire veut pouvoir suivre le temps passé sur le site (connexion / déconnexion) pour tous les utilisateurs d'un backend de base de données. La connexion est facile. Il existe un point d’entrée (le formulaire de connexion) et, par conséquent, les connexions peuvent être lancées dans la base de données dès qu’elles se produisent.

Cependant, les déconnexions sont un peu plus compliquées, car si l'utilisateur ne clique pas sur 'déconnexion' pour nous laisser savoir explicitement qu'il est en train de quitter la solution, il devient plus poilu (et à quelle fréquence les utilisateurs vraiment cliquent-ils sur la déconnexion?) ). Une possibilité (juste en termes de suivi du temps total sur le site) serait d’inscrire chaque chargement de page dans la base de données et de l’associer à l’utilisateur qui l’a chargé; Le problème, c’est que le site est un site de diffusion de vidéos basé sur les membres (ce n’est pas ce que vous pensez!) et que leur dernière page consultée sera probablement une vidéo de vingt ou trente minutes. Nous devons également saisir le temps passé sur cette dernière page, pas seulement le temps de chargement.

J'ai pensé à deux solutions possibles, dont aucune n'est aussi élégante. La première consisterait à intercepter tous les événements de "déchargement" via javascript et à enregistrer un appel à "logout.php" (en supposant que XMLHttpRequest ou quoi que ce soit ne meurt pas dès que la page est déchargée); le problème est que les liens internes sont également enregistrés comme événements de déchargement, donc cliquer sur n'importe quel lien déconnecterait l'utilisateur (vous pouvez vérifier un indicateur dans le gestionnaire de déchargement et faire en sorte que tous les liens internes le définissent, ce qui n'est pas difficile à faire. dynamiquement, mais un peu kludgy). L’autre approche consisterait à définir un intervalle pour envoyer une requête ping à la base de données toutes les 60 s environ, ce qui nous permet de savoir que l’utilisateur est toujours sur le site, puis de faire quelques calculs pour extraire l’historique de l’utilisateur afin de déterminer la durée totale de la session. ; cela semble aussi un peu ridicule. De plus, aucune de ces solutions ne fonctionne pour les utilisateurs avec JS désactivé.

Il semble que ce problème n’est pas inhabituel et qu’il doit exister un meilleur moyen; Existe-t-il une approche fondée sur les meilleures pratiques pour résoudre ce problème? Sinon, voyez-vous un moyen d’améliorer l’une ou l’autre de ces solutions?

Était-ce utile?

La solution

Le Web n'est pas conçu pour permettre un suivi précis des événements de déconnexion. Le navigateur ne garantit pas que l'utilisateur quitte le navigateur. Par conséquent, dans des circonstances normales, le mieux que vous puissiez espérer est d'interrompre l'événement de délai d'expiration de la session. Cet événement peut ne se déclencher que 20 minutes après l'abandon de la page par l'utilisateur. .

Maintenant, vous pouvez améliorer un peu cela en plaçant une requête ajax dans une minuterie sur chaque page (peut-être une ou deux fois par minute) afin de fournir un "battement de coeur", mais cela comporte également des réserves: vous devez faire assurez-vous que la session finira toujours par expirer et qu'il n'est pas garanti que l'utilisateur ne bloquera pas ces demandes, peut-être en désactivant javascript.

Autres conseils

L’utilisation de timer en javascript pour envoyer des requêtes ping au serveur a bien fonctionné. Dans mon cas, le site nécessite JavaScript, donc ce n'est pas un problème. J'utilise également ce mécanisme pour effectuer une vérification qui empêche qu'un seul compte soit connecté à partir de deux machines différentes. Il existe donc des raisons plus convaincantes de procéder de la sorte.

Une chose à garder à l’esprit avec unload est de ne toujours pas vous assurer que l’événement unload sera toujours déclenché. Par exemple, vous aurez des utilisateurs d'ordinateurs portables qui ne ferment que l'ordinateur portable. L'approche de la minuterie sera probablement un peu plus précise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top