Comment obtenir le total exact de visiteurs à compter dans ASP.NET
Je veux savoir le nombre de visiteurs en ligne sur mon site. J'ai fait mes recherches et trouvé deux solutions.
Source: Code Du Projet
En ligne d'utilisateurs actifs contre dans ASP.NET
Il est facile à installer et facile à utiliser, mais il augmente le nombre d'utilisateurs pour chaque requête Ajax/réponse trop. Ma page d'accueil, seul, a 12 requêtes Ajax(8 demandes à une page et 4 demandes sur une autre page). Cela augmente considérablement le nombre d'utilisateurs.
Source: Débordement De Pile Q/A
Compter les pas des Visiteurs
Celui-ci fonctionne exactement le même que le précédent.
Source: ASP.Net Forum
Comment faire pour voir "qui est en ligne" à l'aide de C#
Celui-ci semble mieux que les deux précédents. Voici le détail de code de cette solution.
void Application_Start(object sender, EventArgs e)
{
//Code that runs on application startup
HttpContext.Current.Application["visitors_online"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Session.Timeout = 20; //'20 minute timeout
HttpContext.Current.Application.Lock();
Application["visitors_online"] = Convert.ToInt64(HttpContext.Current.Application["visitors_online"]) + 1;
HttpContext.Current.Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
HttpContext.Current.Application.Lock();
Application["visitors_online"] = Convert.ToInt64(HttpContext.Current.Application["visitors_online"]) - 1;
HttpContext.Current.Application.UnLock();
}
Il semble être capable d'ignorer le en augmentant le nombre de pièces pour chaque Ajax réponse, mais il ajoute encore, pour chaque rafraichissement de la page ou de la page de demande.
Est-il de toute approche de compter le nombre exact de visiteurs en ligne en ASP.Net?
- Meilleure façon que je peux penser serait de raccordement dans le Session_Start() dans le monde.asax fichier. Incrément de votre compte, il
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ne jamais obtenir un tout à fait exact nombre: il n'y a aucun moyen de (fiable) de détecter que l'utilisateur "a navigué vers un autre site" (gauche et le vôtre), ou que l'utilisateur "fermé le navigateur".
Le Session_Start/Session_End façon a le problème que Session_End est seulement appelé à "InProc" des séances, pas si les sessions sont stockées dans StateServer ou SqlServer.
Ce que vous pourriez être en mesure de le faire:
Dictionary<string, DateTime>
la portée de l'Application. Cette stockées identifiant la session (les clés de la chaîne) à l'encontre de l'heure de dernier accès (la valeur de type DateTime)Un problème (au moins): si un utilisateur utilise deux navigateurs à la fois, il a deux sessions sont ouvertes et est compté deux fois. Si les utilisateurs de toujours ouvrir une session, peut-être que vous pourriez compter sur connexion-id au lieu de session-id.
Session_End
sessions sont stockées dans SqlServer?Je veux proposer quelque chose de complètement autre: essayez d'utiliser Google Analytic pour cela. Ces gars-là ajouter des bêta fonctionnalité qui permet le suivi des statistiques en ligne maintenant.
EDIT: Vous n'obtenez pas de moi. Je l'ai mentionné non standard de Google fonctionnalités Analytiques. Je l'ai mentionné nouvelle fonctionnalité en Temps Réel. Les cases en regard de l'article pour plus de détails - Ce qui se passe sur votre site dès maintenant? ou regardez cette vidéo - Google Analytics en temps réel de la bêta
Tout comme Hans mentionné, vous devrez probablement changer votre état de session pour
StateServer
ouSQLServer
, mais ce n'est pas quelque chose d'un extrait de code peut faire. Il est un très bon produit fiable et article détaillé sur codeproject qui traite de ce problème correctement.C'est le code source, j'ai mis en œuvre selon Hans Kesting de la suggestion.
Mondiale.asax
HttpHandleder.cs
AnyPage.aspx.cs(où vous voulez obtenir le nombre total d'utilisateurs en ligne)
Session_Start
et plus de 4000 utilisateurs en appweb ? HttpHandler ?De Hans solution est vraiment super et exactement ce que je veux mais je viens de trouver cet article sur MSDN récemment, ce qui semble être la meilleure pratique à cet effet.
REF: http://msdn.microsoft.com/en-AU/library/system.web.httprequest.anonymousid.aspx
Mondiale.asax
.Fichier ASPX
Pourquoi ne pas vérifier l'IP de l'utilisateur pour obtenir des visites uniques. Les ajouter à un hashset de sorte que vous pouvez faire de belles choses comme faire une heatmap en utilisant un emplacement de l'API: