Ereignisse des Sitzungszustands

Aktualisiert: November 2007

ASP.NET stellt zwei Ereignisse zur Verfügung, mit denen Sie Benutzersitzungen verwalten können: das Session_OnStart-Ereignis, das zu Beginn einer neuer Sitzung ausgelöst wird, und das Session_OnEnd-Ereignis, das ausgelöst wird, wenn eine Sitzung beendet wird oder abläuft.

Hinweis:

Wenn an der Datei Global.asax oder der Datei Web.config einer ASP.NET-Anwendung Änderungen vorgenommen werden, wird die Anwendung neu gestartet. Wenn der aktuelle Sitzungszustandsmodus auf den Wert InProc festgelegt ist, gehen alle im Anwendungs- oder Sitzungszustand gespeicherten Werte verloren. Bedenken Sie, dass einige Virenschutzprogramme Datum und Zeit der letzten Änderung für die Datei Global.asax bzw. die Datei Web.config einer Anwendung ändern können. Informationen zum Festlegen des Sitzungszustandsmodus finden Sie unter Sitzungszustandsmodi.

Das Session_OnStart-Ereignis

Sie können das Session_OnStart-Ereignis bearbeiten, indem Sie der Datei Global.asax eine Unterroutine mit dem Namen Session_OnStart hinzufügen. Die Session_OnStart-Unterroutine wird zu Beginn einer Anforderung ausgeführt, wenn die Anforderung eine neue Sitzung startet. Eine neue Sitzung wird außerdem gestartet, wenn die Anforderung keinen SessionID-Wert enthält oder wenn die SessionID-Eigenschaft in der Anforderung auf eine Sitzung verweist, die bereits abgelaufen ist.

Mit dem Session_OnStart-Ereignis können Sie Sitzungsvariablen initialisieren und sitzungsbezogene Informationen nachverfolgen.

Das Session_OnEnd-Ereignis

Sie können das Session_OnEnd-Ereignis bearbeiten, indem Sie der Datei Global.asax eine Unterroutine mit dem Namen Session_OnEnd hinzufügen. Die Session_OnEnd-Unterroutine wird ausgeführt, wenn die Abandon-Methode aufgerufen wurde oder wenn die Sitzung abgelaufen ist. Eine Sitzung läuft ab, wenn die in der Timeout-Eigenschaft angegebene Minutenanzahl überschritten ist, ohne dass für die Sitzung eine Anforderung gestellt wurde.

Das Session_OnEnd-Ereignis wird nur unterstützt, wenn die Mode-Eigenschaft des Sitzungszustands auf den InProc-Wert festgelegt wurde. Dies ist auch der standardmäßige Wert. Wenn die Mode-Eigenschaft des Sitzungszustands auf den StateServer-Wert oder den SQLServer-Wert festgelegt wurde, wird das Session_OnEnd-Ereignis in der Datei Global.asax ignoriert. Wenn die Mode-Eigenschaft des Sitzungszustands auf den Custom-Wert festgelegt wurde, richtet sich die Unterstützung für das Session_OnEnd-Ereignis nach dem Anbieter für den benutzerdefinierten Sitzungszustandsspeicher.

Sie können das Session_OnEnd-Ereignis dazu verwenden, sitzungsbezogene Informationen (z. B. Benutzerdaten) zu bereinigen. Die entsprechende Datenquelle kann über den SessionID-Wert nachverfolgt werden.

Beispiel für Sitzungsereignisse

Das folgende Codebeispiel enthält eine Session_OnStart-Unterroutine und eine Session_OnEnd-Unterroutine, die Sie der Datei Global.asax hinzufügen können. Die im Beispiel definierten Unterroutinen erstellen einen Zähler, der die Anzahl der aktiven Benutzer einer Anwendung registriert. Beachten Sie, dass dieses Beispiel nur funktioniert, wenn die Mode-Eigenschaft des Sitzungszustands auf den InProc-Wert festgelegt wurde, da das Session_OnEnd-Ereignis nur für den prozessinternen Sitzungszustandsspeicher unterstützt wird.

<script language="VB" >
Public Sub Application_OnStart()
  Application("UsersOnline") = 0
End Sub

Public Sub Session_OnStart()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
  Application.UnLock()
End Sub

Public Sub Session_OnEnd()
  Application.Lock()
  Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
  Application.UnLock()
End Sub
</script>
<script language="C#" >
public void Application_OnStart()
{
  Application["UsersOnline"] = 0;
}

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}
</script>

Siehe auch

Konzepte

Übersicht über den ASP.NET-Sitzungszustand

Übersicht über die ASP.NET-Zustandsverwaltung