Jun 162009
 

Seit kurzem gibt es bei mir im Blog oben Rechts den Hinweis wie viele Besucher zur Zeit bei mir Online sind. Das Ding ist aber sehr einfach gestrickt, sollte aber relativ genau sein. Wer mehr Hintergrundwissen haben möchte kann sich bei Klaus Bock dieses Posting ansehen.

Klaus geht noch weiter. Er registriert ein Java Script auf dem Client das beim schliessen des Browsers noch eine Seite aufruft die nichts anderes macht als die Session auf dem Server zu beenden. Aber spätestens nach 20 Minuten wird die Session auf dem Server so oder so mit Session_End beendet.

Die Implementation in BlogEngine.NET, kurz BE, läuft in etwa wie folgt ab.

Bei BE sind die Sessions standardmässig ausgeschaltet. Ich habe sie einfach in der Web.config wieder eingeschaltet. 

<sessionState mode="InProc" cookieName=".geniali.ch"/>

Als nächstes muss noch bemerkt werden wann eine neue Session startet und wann eine Session beendet wird. Dazu gibt es in ASP.NET zwei Events die man in der Datei global.asax implementieren muss. Bei BE sind die Zwei noch nicht drin.

void Session_Start(object sender, EventArgs e)
{
    // User-Zähler erhöhen.  
    Application.Lock();
    Application["Viewers"] = (int)Application["Viewers"] + 1;
    Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
    // User-Zähler verringern.  
    Application.Lock();
    if((int)Application["Viewers"] > 0)
    {
        Application["Viewers"] = (int)Application["Viewers"] - 1;
    }
    Application.UnLock();
}

Das Application["Viewers"] Objekt muss aber zuerst noch initialisiert werden. Zudem muss auch sichergestellt sein das beim Start des Webs diese Variable auch wieder auf 0 gestellt wird. Dies macht man im Event Application_Start.

void Application_Start(object sender, EventArgs e)
{
    // Schlüssel Viewers in der Anwendung erzeugen
    Application["Viewers"] = 0;
		...

Danach muss nur noch sicher gestellt werden das die “Viewers” auch angezeigt werden. Dazu erstellt man ein neues UserControl. Ich habe das UserControl unter meinem Theme im Ordner Controls abgelegt.

UserOnline.ascx

<%@ Control Language="C#"
 AutoEventWireup="true" 
CodeFile="UserOnline.ascx.cs" 
Inherits="themes_GENiALi_Controls_UserOnline" %>
<asp:Literal ID="litUsers" runat="server"></asp:Literal>

UserOnline.ascx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class themes_GENiALi_Controls_UserOnline 
	: System.Web.UI.UserControl
{
	protected void Page_Load(object sender, EventArgs e)
	{
		litUsers.Text = Application["Viewers"].ToString() 
			+ " Besucher online";
	}
}

Das UserControl kann man einfach auf die site.master des Theme ziehen und dort platzieren. Mit CSS kann die Anzeige noch formatiert und ausgerichtet werden.

Unter dem Strich sollte es in etwa so aussehen. 🙂

8 Besucher Online

kick it on dotnet-kicks.de

  5 Responses to “n-Besucher Online – Einfache Version”

Comments (5)
  1. Kennne ich doch noch vom klassischen ASP. Und wie lange ist die Session bei dir eingestellt?

  2. RSS Reader… die klopfen deine Seite ja in bestimmten intervallen ab, dann noch ein paar Suchmaschinenbots usw.

  3. So viel ich weiss 20 Minuten. Man sieht also in etwa wie viele User in den letzten 20 Minuten auf meinem Blog waren.
    Bin immer wieder ab der Zahl erstaunt. Ich dachte dir käme nie über 5 raus. Ist aber fast immer im zwei stelligen Bereich.

  4. RSS Reader sollten aber via Feedburner gehen.
    Die Suchmaschienen … hmmm … an die habe ich nicht gedacht.
    Das sind ja ganz treue Besucher. 🙂

  5. Mahlzeit
    Hervorragender Post. Da hat mich Google wie schon so oft an einen super Blog geschickt.
    Viele Grüsse aus Phangan

Sorry, the comment form is closed at this time.