Wie man die genaue Summe Besucher Anzahl in ASP.NET
Ich möchte wissen, die Anzahl der Besucher, die online auf meiner Website. Ich habe meine Forschung und fand zwei Lösungen.
Quelle: Code-Projekt
Online aktive Nutzer Zähler in ASP.NET
Es ist einfach einzurichten und einfach zu bedienen, aber es erhöht die Anzahl der Nutzer ist für jeden Ajax-request/response zu. Auf meiner Homepage hat allein 12 von Ajax-Anfragen(8 Anfragen zu einer Seite, und 4 Anfragen auf eine andere Seite). Dies erhöht drastisch die Anzahl der Nutzer ist.
Quelle: Stack-Überlauf Q/A
Zählen die nicht der Besucher
Dieser arbeitet genau das gleiche wie die Vorherige.
Quelle: ASP.Net Forum
Wie zu sehen, "wer ist online" mit C#
Diese eine sieht besser aus als die beiden vorherigen. Hier ist der detail-code dieser Lösung.
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();
}
Scheint es in der Lage sein zu ignorieren, die Erhöhung der Zählung für jede Ajax-response, aber es noch fügt für jede-Seite-refresh oder Seite anfordern.
Da ist jeder Ansatz zu zählen, die genaue Anzahl der online-Besucher in ASP.Net?
InformationsquelleAutor Jonas T | 2012-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man nie eine ganz genaue Zahl: es gibt keine Möglichkeit (zuverlässig) erkennen, dass ein Benutzer "navigiert zu einer anderen Website" (und Links verkaufen) oder, dass die Benutzer "den browser geschlossen".
Den Session_Start/Session_End Methode hat das problem, dass Session_End wird nur aufgerufen, für "InProc" - Sitzungen, aber nicht, wenn die Sitzungen werden gespeichert im StateServer-oder SqlServer.
Dem, was Sie vielleicht in der Lage sein zu tun:
Dictionary<string, DateTime>
im Anwendungsbereich. Diese gespeicherte session-id (string key) gegen die Zeit der neueste Zugang (DateTime-Wert)Ein problem (mindestens): wenn ein Benutzer verwendet zwei Browser gleichzeitig, er hat zwei Sitzungen offen und wird doppelt gezählt. Wenn Sie den Benutzer immer anmelden, vielleicht könnten Sie zählen, auf login-id anstelle der session-id.
<HasSet> und hintergrund-Arbeiter ist mein problem gelöst.
Lösung für
Session_End
Sitzungen werden gespeichert, die in SQL Server?InformationsquelleAutor Hans Kesting
Möchte ich vorschlagen, etwas ganz anderes: versuchen Sie, die Verwendung von Google Analytic. Diese Jungs fügen beta-Funktionalität, mit der die Verfolgung von online-Statistiken jetzt.
EDIT: Sie versteht mich nicht. Ich erwähnte nicht die standard-Google Analytics-Funktionalität. Ich erwähnte neue Funktion - Real-Time. Überprüfen Sie im nächsten Artikel für details - Was auf Ihrer Website passiert jetzt? oder sehen Sie dieses video - Google Analytics Echtzeit beta
vollständige Beispiel-mit GA in der asp.net ?
Sie brauchen keine server-seitigen code zu verwenden zu beginnen GA. Setzen Sie einfach JavaScript-code, den Google bietet auf Ihrer Konto-Seite in der Master-Seite Ihres asp.net app.
InformationsquelleAutor RredCat
Nur, wie Hans bereits erwähnt, werden Sie wahrscheinlich haben, um schalten Sie den Sitzungsstatus an
StateServer
oderSQLServer
, aber das ist nicht etwas, was ein code-snippet tun können. Es ist eine sehr gute zuverlässige und Ausführlicher Artikel auf codeproject , behandelt dieses problem richtig.Ich dachte eigentlich, Sie waren schlecht beraten, ihn gegen InProc, wenn er die Entwicklung einer website oder webapp, um Platz für eine Menge traffic, oder verwenden Sie mehrere Server, InProc wird auf jeden Fall eine schlechte Idee, den Artikel oben eindeutig erklärt die vor-und Nachteile des InProc.
InformationsquelleAutor Chibueze Opata
Dies ist der source-code, den ich umgesetzt nach Hans Kesting Vorschlag.
Global.asax
HttpHandleder.cs
AnyPage.aspx.cs(wo Sie wollen, um die Anzahl der gesamten online-Nutzer)
Session_Start
und mehr 4000 Nutzern in appweb ? HttpHandler ?InformationsquelleAutor Jonas T
Hans-Lösung ist wirklich toll und die Arbeit genau das, was ich will, aber ich fand diesen Artikel auf der MSDN-Website vor kurzem, die zu sein scheint die beste Praxis für diesen Zweck.
REF: http://msdn.microsoft.com/en-AU/library/system.web.httprequest.anonymousid.aspx
Global.asax
.ASPX-Datei
InformationsquelleAutor Jonas T
Warum nicht überprüfen Sie die Benutzer-IP zu bekommen, Besuche. Fügen Sie Sie in ein hashset, so dass Sie tun können, schöne Dinge, wie eine heatmap mit einer location API:
InformationsquelleAutor Cyril Mestrom