Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Wieviele User sind online?

Geschrieben von: Christian Holm
Kategorie: ASP Grundlagen

This printed page brought to you by AlphaSierraPapa

Oftmals ist es bei einer Website interessant zu wissen, wieviele Benutzer gerade "gleichzeitig" auf der Site aktiv sind. Dies läßt sich unter Verwendung von Bordmitteln - Internet Information Services (Windows 2000) bzw. Internet Information Server (Windows NT) - leicht und ohne großen Aufwand realisieren. Dieser Artikel zeigt Ihnen anhand eines einfachen Beispiels einen Lösungsansatz.

Da sich dieser Artikel nur mit einer Lösung beschäftigt, geht dieser nicht näher auf die verwendeten Technologien ein. Hintergrundinformationen zu diesen finden Sie in den (sehr ausführlichen) Artikeln Global.asa: Verwendung, Events und Probleme und Session Variablen - Verwendung und Stolpersteine.

Um die gleichzeitige Anzahl der Benutzer einer Website zu zählen, müssen Sie zunächst die global.asa Datei editieren, beziehungsweise erst erstellen. Diese liegt (meist) im Starting Point einer Website, also im Rootverzeichnis der Website. Da alle ASP Seiten einer Website in einer Application laufen, können diese somit auf eine gemeinsame global.asa zugreifen und die gleichen Application- als auch Sessionvariablen nutzen

Die tatsächliche Lage des Starting Points einer Website finden Sie im Internet Services Manager, indem Sie auf die Eigenschaft der jeweiligen Website klicken. Im Home Directory Tab finden Sie unter Application Settings den Eintrag Starting point:

Genug Konfiguration(-stheorie). Zum ASP Sourcecode. Für dieses Besipiel habe ich eine Minimalversion einer global.asa herangezogen. In dieser werden wir nun die notwendigen Änderungen vornehmen, damit der Usercounter einsatzbereit wird:

<script language="VBScript" runat="SERVER">
Sub Session_OnStart()
   Application.Lock
     Application("ConcurrentUsers") = Application("ConcurrentUsers") + 1
   Application.Unlock 
End Sub

Sub Session_OnEnd()
   Application.Lock
     Application("ConcurrentUsers") = Application("ConcurrentUsers") - 1
   Application.Unlock
End Sub 
</script>

Für das heutige Artikelbeispiel sind nur die beiden Prozeduren Session_OnStart und Session_OnEnd von Interesse. Diese kommen zum Einsatz, wenn ein Benutzer die für ihn erste Seite der Website aufruft (Session_OnStart) bzw. sie entweder durch Session.Abandon verläßt oder der voreingestelte Scripttimeout überschritten wird.

Mit Hilfe der Application Variable ConcurrentUsers speichern wir einfach die Anzahl der gleichzeitigen User. Die Anzahl wird immer dann erhöht, wenn ein neuer Benutzer seine erste Seite auf unserer Site aufruft - und somit die Session_OnStart Prozedur aufgerufen wird.

Die Prozedur Session_OnEnd wird dann aufgerufen, wenn ein Besucher die Site verläßt: entweder explizit per Session.Abandon, oder wenn das Scripttimeout überschritten wird. Daher wird in diesem Fall der Counter um Eins reduziert.

Damit hätten wir eine immer aktuelle Applikationsvariable mit der Anzahl der Benutzer. Nun sollten wir diese Information auch unseren Benutzern zugänglich machen. Dies ist auch nicht weiters schwer, und läßt sich mit einem Response.Write erledigen (test.asp):

Response.Write "Online Users: <b>" &  Application("ConcurrentUsers") & "</b>" 

Wenn Sie nun diese Testseite in einem Browser ausführen, und Sie der einzige Benutzer sind, dann erhalten Sie folgendes Ergebnis:

Je mehr User auf diese Seite zugreifen, desto größer wird klarerweise der Wert der Applicationvariable. Um zu verhindern daß bei großem Andrang durch Concurrency Fehler in der Zählung der Benutzer auftreten, verwende ich Application.Lock und Application.Unlock. Dadurch garantiere ich dem aktuellen ASP-Thread die Alleinrechte, die Applikationsvariablen zu verändern - und niemand anders kann dazwischenfunken.

Schlußberkung

Dieser Artikel ist ein HowTo wie man einfach einen Online-Usercounter für Webseiten implementiert. Die vorgestellte Lösung ist zwar wirklich einfach, aber gibt ausreichend Aufschluß über die Popularität einer Website. Natürlich läßt sich der Sourcecode noch um einiges erweitern, so z.B., daß die Werte zwecks statistischer Auswertung in einer Datenbank gespeichert werden.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010529.zip

Verwandte Artikel

Global.asa: Verwendung, Events und Probleme
http:/www.aspheute.com/artikel/20001018.htm
Session Variablen - Verwendung und Stolpersteine
http:/www.aspheute.com/artikel/20000505.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.