Sitzungszustandsmodi

Aktualisiert: November 2007

Der ASP.NET-Sitzungszustand unterstützt mehrere verschiedene Speicheroptionen für Sitzungsdaten. Jede Option ist durch einen Wert in der SessionStateMode-Enumeration gekennzeichnet. In der folgenden Liste werden die verfügbaren Sitzungszustandsmodi beschrieben:

  • Der InProc-Modus speichert den Sitzungszustand im Arbeitsspeicher auf dem Webserver. Dies ist die Standardeinstellung.

  • Der StateServer-Modus speichert den Sitzungszustand in einem separaten Prozess, dem sogenannten ASP.NET-Zustandsdienst. Dieser Modus stellt sicher, dass der Sitzungszustand bei einem Neustart der Webanwendung erhalten bleibt. Er macht außerdem anderen Webservern in einer Webfarm den Sitzungszustand verfügbar.

  • Der SQLServer-Modus speichert den Sitzungszustand in einer SQL Server-Datenbank. Dieser Modus stellt sicher, dass der Sitzungszustand bei einem Neustart der Webanwendung erhalten bleibt. Er macht außerdem anderen Webservern in einer Webfarm den Sitzungszustand verfügbar.

  • Mit dem Custom-Modus können Sie einen benutzerdefinierten Speicheranbieter angeben.

  • Der Off-Modus deaktiviert den Sitzungszustand.

Sie können angeben, welchen Sitzungszustandsmodus ASP.NET verwenden soll, indem Sie dem mode-Attribut des sessionState-Elements in der Datei Web.config der Anwendung einen SessionStateMode-Enumerationswert zuweisen. Bis auf den InProc-Modus und den Off-Modus erfordern die Modi zusätzliche Parameter wie Verbindungszeichenfolgen-Werte, die weiter unten erläutert werden. Der aktuell gewählte Sitzungszustand ist dem Wert der HttpSessionState.Mode-Eigenschaft zu entnehmen.

Prozessinterner Modus

Der Standard-Sitzungszustandsmodus ist der prozessinterne Modus. Der prozessinterne Modus wird mit dem SessionStateMode-Enumerationswert InProc angegeben. Der prozessinterne Modus speichert Sitzungszustandswerte und -variablen im Arbeitsspeicher auf dem lokalen Webserver. Dieser Modus unterstützt als einziger das Session_OnEnd-Ereignis. Weitere Informationen zum Session_OnEnd-Ereignis finden Sie unter Ereignisse des Sitzungszustands.

Vorsicht:

Wenn Sie den Webgartenmodus aktiviert haben, indem Sie das webGarden-Attribut im processModel-Element in der Datei Web.config der Anwendung auf true festgelegt haben, sollten Sie nicht den InProc-Sitzungszustandsmodus verwenden. Es könnte sonst zu Datenverlust kommen, wenn unterschiedliche Anforderungen für dieselbe Sitzung von verschiedenen Workerprozessen verarbeitet werden.

Zustandsservermodus

Der StateServer-Modus speichert den Sitzungszustand in einem Prozess, dem sogenannten ASP.NET-Zustandsdienst, der vom ASP.NET-Workerprozess und dem IIS-Anwendungspool getrennt ist. Durch Verwendung dieses Modus wird sichergestellt, dass der Sitzungszustand bei einem Neustart der Webanwendung erhalten bleibt. Außerdem wird dadurch der Sitzungszustand für andere Webserver in einer Webfarm verfügbar gemacht.

Um den StateServer-Modus verwenden zu können, müssen Sie zunächst sicherstellen, dass der ASP.NET-Zustandsdienst, der zum Speichern des Sitzungszustands verwendet wird, auf dem Server ausgeführt wird. Der ASP.NET-Zustandsdienst wird bei der Installation von ASP.NET und .NET Framework als Dienst installiert. Der ASP.NET-Zustandsdienst wird an folgendem Speicherort installiert:

Systemstamm\Microsoft.NET\Framework\VersionsNummer\aspnet_state.exe

Um eine ASP.NET-Anwendung für die Verwendung des StateServer-Modus zu konfigurieren, sind folgende Änderungen an der Datei Web.config der Anwendung erforderlich:

Das folgende Beispiel zeigt Konfigurationseinstellungen für den StateServer-Modus, wobei der Sitzungszustand auf einem Remotecomputer mit dem Namen SampleStateServer gespeichert wird:

<configuration>
  <system.web>
    <sessionState mode="StateServer"
      stateConnectionString="tcpip=SampleStateServer:42424"
      cookieless="false"
      timeout="20"/>
  </system.web>
</configuration>
Hinweis:

Im Sitzungszustand gespeicherte Objekte müssen bei Verwendung des StateServer-Modus serialisierbar sein. Informationen über serialisierbare Objekte finden Sie in der SerializableAttribute-Klasse.

Wenn Sie den StateServer-Modus in einer Webfarm verwenden, müssen Sie für alle Anwendungen, die Teil der Webfarm sind, dieselben Verschlüsselungsschlüssel im machineKey-Element Ihrer Webkonfiguration angeben. Informationen zum Erstellen von Computerschlüsseln finden Sie im Knowledge Base-Artikel 313091, "How to create keys by using Visual Basic.NET for use in Forms authentication" in der Microsoft Knowledge Base unter https://support.microsoft.com/?in=de.

SQL Server-Modus

Der SQLServer-Modus speichert den Sitzungszustand in einer SQL Server-Datenbank. Durch Verwendung dieses Modus wird sichergestellt, dass der Sitzungszustand bei einem Neustart der Webanwendung erhalten bleibt. Außerdem wird dadurch der Sitzungszustand für andere Webserver in einer Webfarm verfügbar gemacht.

Hinweis:

Im Sitzungszustand gespeicherte Objekte müssen bei Verwendung des SQL Server-Modus serialisierbar sein. Informationen über serialisierbare Objekte finden Sie in der SerializableAttribute-Klasse.

Um den SQLServer-Modus verwenden zu können, müssen Sie zunächst sicherstellen, dass die ASP.NET-Sitzungszustands-Datenbank auf dem SQL Server installiert ist. Sie können die ASP.NET-Sitzungszustands-Datenbank mit dem Tool Aspnet_regsql.exe installieren, wie weiter unten erläutert wird.

Um eine ASP.NET-Anwendung für die Verwendung des SQLServer-Modus zu konfigurieren, sind folgende Änderungen an der Datei Web.config der Anwendung erforderlich:

Das folgende Beispiel zeigt Konfigurationseinstellungen für den SQLServer-Modus, wobei der Sitzungszustand auf dem SQL Server mit dem Namen "SampleSqlServer" gespeichert ist.

<configuration>
  <system.web>
    <sessionState mode="SQLServer"
      sqlConnectionString="Integrated Security=SSPI;data 
        source=SampleSqlServer;" />
  </system.web>
</configuration>
Hinweis:

Wenn Sie in der Konfigurationsdatei mit dem sqlConnectionString-Attribut des sessionState-Elements eine vertrauenswürdige Verbindung zu dem SQL Server angeben, stellt das SessionStateModule unter Verwendung der Sicherheitsfunktionen von SQL Server eine Verbindung zum SQL Server her. Die Verbindung wird entweder mit der ASP.NET-Prozessidentität oder mit den Benutzeranmeldeinformationen im identity-Konfigurationselement hergestellt, sofern diese vorhanden sind. Sie können festlegen, dass stattdessen die von IIS imitierte Identität zu verwenden ist, indem Sie <identity impersonate="true" /> angeben und das useHostingIdentity-Attribut des sessionState-Konfigurationselements auf false festlegen. Weitere Informationen über die ASP.NET-Prozessidentität finden Sie unter Konfigurieren der Prozessidentität in ASP.NET und Identitätswechsel in ASP.NET

Um den SQLServer-Modus für eine Webfarm zu konfigurieren, legen Sie in der Konfigurationsdatei für jeden einzelnen Webserver das sqlConnectionString-Attribut des sessionState-Elements so fest, dass es auf dieselbe SQL Server-Datenbank zeigt. Auf allen Webservern, die den Sitzungszustand in der SQL Server-Datenbank gemeinsam nutzen, muss der Pfad der ASP.NET-Anwendung in der IIS-Metabase identisch sein. Informationen zur Vorgehensweise bei unterschiedlichen Anwendungspfaden auf den Servern finden Sie im Artikel 325056, "PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode", in der Microsoft Knowledge Base unter https://support.microsoft.com/?in=de.

Installieren der Sitzungszustands-Datenbank mit dem Tool Aspnet_regsql.exe

Zur Installation der Sitzungszustands-Datenbank auf SQL Server führen Sie das Tool Aspnet_regsql.exe aus, das sich auf dem Webserver im Ordner Systemstamm\Microsoft.NET\Framework\VersionsNummer befindet. Geben Sie mit dem Befehl folgende Informationen an:

  • DenNamen der SQL Server-Instanz unter Verwendung der -S-Option.

  • Die Anmeldeinformationen für ein Konto, das berechtigt ist, eine Datenbank auf SQL Server zu erstellen. Geben Sie die -E-Option an, um den aktuell angemeldeten Benutzer zu verwenden, oder verwenden Sie die -U-Option für die Angabe einer Benutzer-ID und die -P-Option für die Angabe eines Kennworts.

  • Die -ssadd-Befehlszeilenoption, um die Sitzungszustands-Datenbank hinzuzufügen.

    Standardmäßig können Sie das Tool Aspnet_regsql.exe nicht zur Installation einer Sitzungszustands-Datenbank auf SQL Server Express Edition verwenden. Um Aspnet_regsql.exe zur Installation einer SQL Server Express Edition-Datenbank ausführen zu können, müssen Sie zunächst die SQL Server-Option Agent XPs mithilfe von T-SQL-Befehlen folgendermaßen aktivieren:

    EXECUTE sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'Agent XPs', 1
    RECONFIGURE WITH OVERRIDE
    GO
    
    EXECUTE sp_configure 'show advanced options', 0
    RECONFIGURE WITH OVERRIDE
    GO
    

    Sie müssen diese T-SQL-Befehle für jede einzelne Instanz von SQL Server Express Edition ausführen, in der die Option Agent XPs deaktiviert ist.

Standardmäßig erstellt das Tool Aspnet_regsql.exe eine Datenbank mit dem Namen ASPState, die gespeicherte Prozeduren enthält, welche den SQLServer-Modus unterstützen. Sitzungsdaten selbst werden standardmäßig in der Datenbank tempdb gespeichert. Optional können Sie die -sstype-Option verwenden, um den Speicherort für Sitzungsdaten zu ändern. In der folgenden Tabelle werden die möglichen Werte für die -sstype-Option angegeben:

Option

Beschreibung

t

Speichert Sitzungsdaten in der SQL Server-Datenbank tempdb. Dies ist die Standardeinstellung. Sitzungsdaten, die in der Datenbank tempdb gespeichert werden, gehen bei einem Neustart von SQL Server verloren.

p

Speichert Sitzungsdaten in der Datenbank ASPState anstelle der Datenbank tempdb.

c

Speichert Sitzungsdaten in einer benutzerdefinierten Datenbank. Wenn Sie die c-Option angeben, müssen Sie außerdem mit der -d-Option den Namen der benutzerdefinierten Datenbank angeben.

Der folgende Befehl erstellt beispielsweise eine Datenbank mit dem Namen ASPState auf einer SQL Server-Instanz mit dem Namen "SampleSqlServer" und gibt an, dass Sitzungsdaten auch in der Datenbank ASPState gespeichert werden:

aspnet_regsql.exe -S SampleSqlServer -E -ssadd -sstype p

Hinweis:

Wenn Sie ASP.NET 1.0 oder ASP.NET 1.1 verwenden, können Sie ASP.NET nicht mit dem Tool Aspnet_regsql.exe konfigurieren, um den Sitzungszustand in einer persistenten SQL Server-Datenbank zu speichern. Es existieren jedoch Skripts, mit denen der Sitzungszustand in einer permanenten Datenbank gespeichert werden kann. Ausführliche Informationen finden Sie im Microsoft Knowledge Base-Artikel 311209 "HOW TO: Configure ASP.NET for Persistent SQL Server Session State Management" unter https://support.microsoft.com/?in=de. Als Alternative kann der persistente Sitzungszustand auf Webservern, auf denen ASP.NET 1.0 oder ASP.NET 1.1 ausgeführt wird, an einen SQL-Server weitergeleitet werden, auf dem das ASP.NET 2.0-Sitzungszustandsschema installiert ist.

Im SQLServer-Modus können Sie mehrere Computer, die SQL Server ausführen, als Failovercluster konfigurieren. Dies bedeutet, dass zwei oder mehr identische Computer, die SQL Server ausführen, die Daten einer einzigen Datenbank speichern. Wenn ein Computer mit SQL Server ausfällt, kann ein anderer Server im Cluster übernehmen und Anforderungen verarbeiten, ohne dass Sitzungsdaten verloren gehen. Um den SQL Server-Modus für ein Failovercluster zu konfigurieren, müssen Sie -sstype p angeben, wenn Sie das Tool Aspnet_regsql.exe ausführen, damit die Sitzungszustandsdaten statt in der Datenbank tempdb in der Datenbank ASPState gespeichert werden. Das Speichern des Sitzungszustands in der Datenbank tempdb wird für einen SQL Server-Cluster nicht unterstützt. Weitere Informationen zum Einrichten des SQL Server-Modus für ein Failovercluster finden Sie im Artikel 323262, "How to use ASP.NET session state SQL Server Mode in a failover cluster" in der Microsoft Knowledge Base unter https://support.microsoft.com/?in=de.

Benutzerdefinierter Modus

Der Custom-Modus gibt an, dass Sie Sitzungszustandsdaten mit einem benutzerdefinierten Sitzungszustandsspeicher-Anbieter speichern möchten. Wenn Sie die ASP.NET-Anwendung für den ModeCustom konfigurieren, müssen Sie mit dem providers-Unterelement des sessionState-Konfigurationselements den Typ des Sitzungszustandsspeicher-Anbieters festlegen. Sie geben den Anbietertyp mit einem add-Unterelement an, das sowohl ein type-Attribut mit dem Namen des Anbietertyps als auch ein name-Attribut mit dem Namen der Anbieterinstanz enthält. Der Name der Anbieterinstanz wird an das customProvider-Attribut des sessionState-Elements übergeben, um den ASP.NET-Sitzungszustand für die Verwendung dieser Anbieterinstanz zum Speichern und Abrufen von Sitzungsdaten zu konfigurieren.

Das folgende Beispiel zeigt Elemente einer Datei Web.config, die festlegen, dass der ASP.NET-Sitzungszustand einen benutzerdefinierten Sitzungszustandsspeicher-Anbieter verwendet.

<configuration>
  <connectionStrings>
    <add name="OdbcSessionServices" 
      connectionString="DSN=SessionState;" />
  </connectionStrings>

  <system.web>
    <sessionState 
      mode="Custom"
      customProvider="OdbcSessionProvider">
      <providers>
        <add name="OdbcSessionProvider"
          type="Samples.AspNet.Session.OdbcSessionStateStore"
          connectionStringName="OdbcSessionServices" 
          writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>
  </system.web>
</configuration>

Weitere Informationen über benutzerdefinierte Sitzungszustandsspeicher-Anbieter finden Sie unter Implementieren eines Sitzungszustandsspeicher-Anbieters.

Hinweis:

Ein benutzerdefinierter Sitzungszustandsspeicher-Anbieter verwendet für den Zugriff auf alle geschützten Ressourcen, wie SQL Server, die ASP.NET-Prozessidentität oder die im identity-Konfigurationselement enthaltenen Benutzeranmeldeinformationen, falls diese vorhanden sind. Sie können festlegen, dass stattdessen die von IIS imitierte Identität zu verwenden ist, indem Sie <identity impersonate="true" /> angeben und das useHostingIdentity-Attribut des sessionState-Konfigurationselements auf false festlegen. Weitere Informationen über die ASP.NET-Prozessidentität finden Sie unter Konfigurieren der Prozessidentität in ASP.NET und Identitätswechsel in ASP.NET

Siehe auch

Konzepte

Übersicht über den ASP.NET-Sitzungszustand

Übersicht über die ASP.NET-Zustandsverwaltung

Referenz

providers-Element für sessionState (ASP.NET-Einstellungsschema)