Je dois indiquer combien de personnes sont en ligne sur ce site. Le site a été développé en utilisant ASP.NET 2.0. Actuellement, j'utilise le début de session (augmenter de 1) et l'événement de fin de session (diminuer de 1) dans Global.asax. Mais l'événement Session_End n'appelle pas correctement la plupart du temps. Y a-t-il un meilleur moyen d'y parvenir?Comment trouver combien de personnes sont en ligne sur un site Web
Répondre
Nous avons le même problème dans un projet, après plusieurs méthodes, nous finissons par suivre le temps d'inactivité de chaque utilisateur, lorsque le temps d'inactivité est dépassé, nous considérons que l'utilisateur n'est plus en ligne. bien sûr, vous devez également tenir compte de l'autre problème tel que la déconnexion de l'utilisateur, ou se reconnecter après le délai d'attente ...
Vous n'irez pas beaucoup mieux puis incrémenter en Session_Start
et en décrémentant en Session_End
sauf si vous utilisez d'autres moyens comme une base de données. Lorsque vous authentifiez vos demandes, vous pouvez mettre à jour un horodatage dans la base de données pour montrer que l'utilisateur a été actif et après un temps donné (disons 15 minutes), la requête qui recueille le nombre d'utilisateurs simultanés ignore cette ligne dans la base de données (décrémentant ainsi le compte).
Une recherche rapide sur Google a révélé un handy way of doing this avec un HttpModule. Dans l'ensemble, Yohann a fait un excellent travail avec cela. Il met en œuvre un délai d'attente défini ci-dessus, mais sinon, il n'existe aucun moyen précis de le faire en dehors de vérifier le fichier perfmon.exe du serveur et de vérifier le nombre de connexions en cours du WebService >> WebAppPool. Lorsque j'ai implémenté cela moi-même, j'ai utilisé une table SQL Server pour stocker une date/heure et des informations sur l'authentification. J'ai décrémenté le compte en réévaluant et en faisant correspondre les adresses IP chaque fois que je devais actualiser le cache de données (une fois toutes les 10 minutes).
+1 Cela ressemble à une approche très saine. L'utilisation de SQL Server pour sauvegarder le stockage est requise pour les implémentations de batterie de serveurs Web (sauf si vous utilisez quelque chose comme Velocity pour un magasin de session). Bookmarked pour l'expérimentation future. Merci! –
Je l'ai déjà fait et je peux attester que Session_End ne sera appelée que si vous détruisez manuellement la session (Session.Abandon). Quand vous y réfléchissez, cela a du sens. Si l'utilisateur n'est pas sur le site, le code ne sera jamais exécuté. Ce que j'ai fait était stocker une hashtable dans l'état d'application qui a contenu le nom d'utilisateur et un Datetime pour la dernière fois que l'utilisateur a été vu sur le site. Pour chaque chargement de page, j'appellerais une fonction qui insérerait ou mettrait à jour cette valeur pour l'utilisateur courant. Ensuite, il serait éliminer la liste entière et supprimer toutes les entrées qui sont plus anciennes que le délai d'expiration de la session (20 minutes ou autre). N'oubliez pas d'utiliser le verrouillage ou la synchronisation pour éviter les conditions de course lorsque vous modifiez cette liste.
Cela a l'avantage non seulement de connaître le nombre de personnes, mais également les utilisateurs.
Si vous n'avez pas quelque chose d'unique comme un nom d'utilisateur, vous pouvez utiliser Session.SessionID à la place. Il devrait être unique par visiteur de votre site. Mais attention, l'utilisation d'une variable d'état d'application ou d'application a son propre lot de problèmes car elle ne se partage pas entre les processus en mode "Web Garden" ou dans une configuration multiserveur. Vous auriez besoin d'un support plus persistant comme une base de données ou un cache distribué pour les configurations à plus grande échelle.
- 1. Comment puis-je savoir combien de personnes sont abonnées à un flux RSS que je sers?
- 2. Comment trouver tous les liens/pages sur un site Web
- 3. script pour me dire qui, et combien d'utilisateurs, sont en ligne
- 4. Trouver un champ sur le site SharePoint
- 5. Grattez un prix sur un site Web
- 6. Mettre un site web en mode maintenance?
- 7. OpenID vs connexion utilisateur personnalisée pour un site web utilisé par des personnes non-tech
- 8. Y at-il un moyen de trouver combien de clés sont actuellement dans un NSMutableDictionary?
- 9. Comment trouver le temps de chargement moyen du site web?
- 10. publier un site web en utilisant msbuild
- 11. Combien de bogues sont possibles?
- 12. Diagrammes à barres sur un site Web
- 13. Intégrer un site web/page en Silverlight
- 14. Dois-je mettre l'accès client sur un autre site Web
- 15. Deux domaines sur un site Web?
- 16. Contenu multilingue sur un site Web
- 17. Webcam en direct sur le site Web ASP.NET
- 18. Bulletin: Comment est-il possible de déterminer combien de personnes ont ouvert l'e-mail?
- 19. Site Web de référence
- 20. Comment vérifier si un site Web est en cours
- 21. Comment diffuser plusieurs webcams sur un site Web?
- 22. Conseil en architecture pour un site web
- 23. de base questions d'exploration Web: Comment créer une liste de toutes les pages sur un site Web en utilisant php?
- 24. Vidéo dans un site Web
- 25. Combien de personnes ont abusé de votre option d'achat 'avec la source'?
- 26. C# Comment puis-je trouver un formulaire sur une page Web en C#?
- 27. Combien et quelles sont les utilisations de "const" en C++?
- 28. Trouver un contrôle dans un formulaire en ligne
- 29. In VSS 6.0 Comment activer le travail sur un seul fichier avec plusieurs personnes
- 30. Comment mieux emballer un site Web
Utilisez-vous l'un des fournisseurs d'appartenance ASP.NET? Comme le SqlMembershipProvider? –