Übersicht über die ASP.NET-Zustandsverwaltung

Aktualisiert: November 2007

Bei jeder Bereitstellung einer Webseite auf dem Server wird eine neue Instanz der Webseitenklasse erstellt. Bei der herkömmlichen Webprogrammierung würde dies normalerweise bedeuten, dass alle zur Seite gehörenden Informationen und die Steuerelemente auf der Seite bei jeder Client-Server-Schleife (Roundtrip) verloren gingen. Wenn z. B. ein Benutzer Informationen in ein Textfeld eingibt, würden diese Informationen während der Schleife vom Browser oder Clientgerät zum Server verloren gehen.

Um diese inhärente Einschränkung der herkömmlichen Webprogrammierung zu überwinden, enthält ASP.NET eine Reihe von Optionen, mit denen Sie die Daten sowohl auf Seitenbasis als auch auf Anwendungsbasis bewahren können. Es handelt sich um folgende Features:

  • Ansichtszustand

  • Steuerelementzustand

  • Ausgeblendete Felder

  • Cookies

  • Abfragezeichenfolgen

  • Anwendungszustand

  • Sitzungszustand

  • Profileigenschaften

Ansichtszustand, Steuerelementzustand, ausgeblendete Felder, Cookies und Abfragezeichenfolgen speichern die Daten jeweils auf dem Client. Anwendungszustand, Sitzungszustand und Profileigenschaften hingegen speichern die Daten im Speicher des Servers. Jede Option hat je nach Einsatzszenario unterschiedliche Vor- und Nachteile.

Clientbasierte Zustandsverwaltungsoptionen

In den folgenden Abschnitten werden Optionen für die Zustandsverwaltung beschrieben, für die das Speichern der Informationen entweder in der Seite oder auf dem Client erforderlich ist. Bei diesen Optionen bleiben die Informationen auf dem Server zwischen den Schleifen nicht erhalten.

Ansichtszustand

Die ViewState-Eigenschaft enthält ein Dictionary-Objekt, um Werte zwischen mehreren Anforderungen derselben Seite beizubehalten. Dies ist die Standardmethode, die die Seite zum Beibehalten von Seitenwerten und Werten für Steuerelementeigenschaften zwischen den Schleifen verwendet.

Bei der Verarbeitung der Seite wird der aktuelle Status der Seite und der Steuerelemente in eine Zeichenfolge gehasht und in der Seite als ausgeblendetes Feld gespeichert. Wenn die in der ViewState-Eigenschaft gespeicherte Datenmenge den in der MaxPageStateFieldLength-Eigenschaft angegebenen Wert übersteigt, werden zur Speicherung mehrere ausgeblendete Felder verwendet. Beim Zurücksenden der Seite an den Server wird die Zeichenfolge für den Ansichtszustand bei der Seiteninitialisierung analysiert, und die Eigenschafteninformationen in der Seite werden wiederhergestellt.

Sie können auch Werte im Ansichtszustand speichern. Weitere Informationen zur Verwendung des Ansichtszustands finden Sie unter Übersicht über den ASP.NET-Ansichtszustand. Empfehlungen darüber, wann Sie den Ansichtszustand verwenden sollten, finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Steuerelementzustand

Manchmal müssen Sie Steuerelementzustandsdaten speichern, damit Steuerelemente ordnungsgemäß funktionieren. Sie haben z. B. ein benutzerdefiniertes Steuerelement geschrieben, das verschiedene Registerkarten hat, auf denen unterschiedliche Informationen angezeigt werden. Damit das Steuerelement wie geplant funktioniert, muss es wissen, welche Registerkarte zwischen den Schleifen ausgewählt ist. Zu diesem Zweck kann die ViewState-Eigenschaft verwendet werden. Der Ansichtszustand kann jedoch von Entwicklern auf Seitenebene deaktiviert werden, sodass Ihr Steuerelement praktisch unbrauchbar würde. Zur Lösung dieses Problems macht das ASP.NET-Seitenframework in ASP.NET das Feature mit dem Namen Steuerelementzustand verfügbar.

Die ControlState-Eigenschaft ermöglicht Ihnen, Eigenschafteninformationen eines Steuerelements beizubehalten, und kann nicht wie die ViewState-Eigenschaft deaktiviert werden.

Ausgeblendete Felder

ASP.NET ermöglicht Ihnen das Speichern von Informationen in einem HiddenField-Steuerelement, das als standardmäßiges ausgeblendetes HTML-Feld wiedergegeben wird. Ein ausgeblendetes Feld wird im Browser nicht sichtbar dargestellt. Sie können jedoch seine Eigenschaften wie bei einem Standardsteuerelement darstellen. Wenn eine Seite an den Server übertragen wird, wird der Inhalt eines ausgeblendeten Felds in der HTTP-Formularauflistung zusammen mit den Werten von anderen Steuerelementen gesendet. Ein ausgeblendetes Feld fungiert als Repository für beliebige seitenspezifische Informationen, die Sie direkt in der Seite speichern möchten.

Sicherheitshinweis:

Für böswillige Benutzer ist es einfach, die Inhalte eines ausgeblendeten Felds anzuzeigen und zu ändern. Speichern Sie daher in ausgeblendeten Feldern keine vertraulichen Daten oder solche Daten, die für die Funktionsfähigkeit der Anwendung unverzichtbar sind. Weitere Informationen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Bei einem HiddenField-Steuerelement wird eine einzelne Variable in der Value-Eigenschaft gespeichert. Das Steuerelement muss der Seite ausdrücklich hinzugefügt werden. Weitere Informationen finden Sie unter Übersicht über das HiddenField-Webserversteuerelement.

Wenn die Werte in ausgeblendeten Feldern während der Seitenverarbeitung zur Verfügung stehen sollen, müssen Sie die Seite mithilfe des HTTP-POST-Befehls senden. Wenn Sie ausgeblendete Felder verwenden und eine Seite als Reaktion auf einen Link oder einen HTTP-GET-Befehl verarbeitet wird, sind die ausgeblendeten Felder nicht verfügbar. Verwendungsempfehlungen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Cookies

Bei einem Cookie handelt es sich um eine kleine Menge von Daten, die entweder in einer Textdatei auf dem Dateisystem des Clients oder im Speicher einer Clientbrowsersitzung gespeichert werden. Es enthält sitespezifische Informationen, die der Server zusammen mit der Seitenausgabe an den Client sendet. Cookies können temporär (mit bestimmter Ablaufzeit und bestimmtem Ablaufdatum) oder permanent sein.

Sie können Cookies zum Speichern von Informationen über einen bestimmten Client, eine bestimmte Sitzung oder eine bestimmte Anwendung verwenden. Die Cookies werden auf dem Clientgerät gespeichert. Wenn der Browser eine Seite anfordert, sendet er die Informationen im Cookie zusammen mit den Anforderungsinformationen. Der Server kann das Cookie lesen und seinen Wert extrahieren. Im Allgemeinen wird ein (möglicherweise verschlüsseltes) Token gespeichert, das angibt, dass der Benutzer bereits in der Anwendung authentifiziert wurde.

Sicherheitshinweis:

Der Browser kann die Daten nur an den Server zurücksenden, der das Cookie ursprünglich erstellt hat. Böswillige Benutzer können sich jedoch Zugriff auf fremde Cookies verschaffen und deren Inhalt lesen. Speichern Sie in einem Cookie keine vertraulichen Informationen, wie Benutzername und Kennwort. Speichern Sie stattdessen im Cookie ein Token, durch das der Benutzer identifiziert wird. Dann können Sie die vertraulichen Informationen über das Token auf dem Server suchen.

Weitere Informationen über das Verwenden von Cookies finden Sie unter Cookies und Empfehlungen zur ASP.NET-Zustandsverwaltung.

Abfragezeichenfolgen

Bei einer Abfragezeichenfolge handelt es sich um Informationen, die an das Ende einer Seiten-URL angehängt werden. Eine typische Abfragezeichenfolge könnte folgendermaßen aussehen:

https://www.contoso.com/listwidgets.aspx?category=basic&price=100

Im URL-Pfad oben beginnt die Abfragezeichenfolge mit dem Fragezeichen (?) und enthält die zwei Attribut-Wert-Paare "category" und "price".

Abfragezeichenfolgen bieten eine einfache, jedoch beschränkte Möglichkeit für die Verwaltung von Zustandsinformationen. Beispielsweise ist dies eine einfache Möglichkeit, Informationen, z. B. Produktnummern, von einer Seite zu einer anderen zu übergeben, wo sie verarbeitet werden. Einige Browser und Clientgeräte beschränken jedoch die Länge der URL auf 2083 Zeichen.

Sicherheitshinweis:

In einer Abfragezeichenfolge übergebene Informationen können von böswilligen Benutzern manipuliert werden. Verwenden Sie keine Abfragezeichenfolgen zur Übermittlung von wichtigen oder vertraulichen Daten. Außerdem können Benutzer die URL als Lesezeichen speichern oder an andere Benutzer senden und so die enthaltenen Informationen weitergeben. Weitere Informationen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung und Gewusst wie: Schutz gegen Skriptangriffe in einer Webanwendung durch Anwenden von HTML-Codierung auf Zeichenfolgen.

Wenn die Werte für Abfragezeichenfolgen während der Seitenverarbeitung zur Verfügung stehen sollen, müssen Sie die Seite mithilfe des HTTP-GET-Befehls senden. Sie können demnach eine Abfragezeichenfolge nicht nutzen, wenn eine Seite als Reaktion auf einen HTTP-POST-Befehl verarbeitet wird. Verwendungsempfehlungen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Serverbasierte Zustandsverwaltungsoptionen

ASP.NET bietet Ihnen vielfältige Möglichkeiten zum Verwalten von Zustandsinformationen auf dem Server, sodass die Informationen nicht für längere Zeit auf dem Client gespeichert werden müssen. Mit der serverbasierten Zustandsverwaltung können Sie die Informationsmenge verringern, die zur Beibehaltung des Zustands an den Client gesendet wird. Dabei werden jedoch kostbare Ressourcen auf dem Server verbraucht. In den folgenden Abschnitten werden drei Features für die serverbasierte Zustandsverwaltung beschrieben: Anwendungszustand, Sitzungszustand und Profileigenschaften.

Anwendungszustand

In ASP.NET können Sie mithilfe des Anwendungszustands, der eine Instanz der HttpApplicationState-Klasse ist, Werte für jede aktive Webanwendung speichern. Der Anwendungszustand ist ein globaler Speichermechanismus, auf den von allen Seiten der Webanwendung aus zugegriffen werden kann. Der Anwendungszustand ist daher nützlich, um Informationen zu speichern, die zwischen Serverschleifen und zwischen Seitenanforderungen beibehalten werden müssen. Weitere Informationen finden Sie unter Übersicht über den ASP.NET-Anwendungszustand.

Der Anwendungszustand wird in einem Schlüssel/Wert-Wörterbuch gespeichert, das während jeder Anforderung einer bestimmten URL erstellt wird. Sie können dieser Struktur die anwendungsspezifischen Informationen hinzufügen, um sie zwischen Seitenanforderungen zu speichern.

Nachdem Sie dem Anwendungszustand die anwendungsspezifischen Informationen hinzugefügt haben, wird er vom Server verwaltet. Verwendungsempfehlungen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Sitzungszustand

In ASP.NET können Sie mithilfe des Sitzungszustands, der eine Instanz der HttpSessionState-Klasse ist, Werte für jede aktive Webanwendungssitzung speichern. Eine Übersicht finden Sie unter Übersicht über den ASP.NET-Sitzungszustand.

Der Sitzungszustand ist ähnlich dem Anwendungszustand, mit der Ausnahme, dass sich der Gültigkeitsbereich auf die aktuelle Browsersitzung erstreckt. Wenn die Anwendung von verschiedenen Benutzern verwendet wird, hat jede Benutzersitzung einen anderen Sitzungszustand. Wenn ein Benutzer die Anwendung verlässt und später wieder damit arbeitet, hat die zweite Benutzersitzung einen anderen Sitzungszustand wie die erste.

Der Sitzungszustand ist als Schlüssel/Wert-Wörterbuch zum Speichern von sitzungsspezifischen Informationen angelegt, die zwischen Serverschleifen und Seitenanforderungen beibehalten werden müssen. Weitere Informationen finden Sie unter Übersicht über den ASP.NET-Sitzungszustand.

Sie können den Sitzungszustand für die folgenden Aufgaben verwenden:

  • Browser- oder Clientgerätanforderungen eindeutig identifizieren und sie einer individuellen Sitzungsinstanz auf dem Server zuordnen.

  • Sitzungsspezifische Daten auf dem Server speichern, um sie über mehrere Browser- oder Clientgerätanforderungen innerhalb derselben Sitzung zu verwenden.

  • Entsprechende Sitzungsverwaltungsereignisse auslösen. Außerdem können Sie Anwendungscode schreiben, der diese Ereignisse nutzt.

Nachdem Sie dem Sitzungszustand die anwendungsspezifischen Informationen hinzugefügt haben, wird dieses Objekt vom Server verwaltet. Abhängig von den angegebenen Optionen können Sitzungsinformationen in Cookies, auf einem prozessexternen Server oder auf einem Computer mit Microsoft SQL Server gespeichert werden. Verwendungsempfehlungen finden Sie unter Empfehlungen zur ASP.NET-Zustandsverwaltung.

Profileigenschaften

ASP.NET enthält ein Feature mit dem Namen Profileigenschaften, mit dem Sie benutzerspezifische Daten speichern können. Dieses Feature ähnelt dem Sitzungszustand, mit dem Unterschied, dass Profildaten nicht verloren gehen, wenn eine Benutzersitzung abläuft. Das Profileigenschaftenfeature verwendet ein ASP.NET-Profil, das in einem persistenten Format gespeichert und einem bestimmten Benutzer zugeordnet wird. Über das ASP.NET-Profil können Sie problemlos Benutzerinformationen verwalten, ohne eine eigene Datenbank erstellen und pflegen zu müssen. Außerdem stellt das Profil die Benutzerinformationen mithilfe einer stark typisierten API zur Verfügung, auf die Sie von überall in Ihrer Anwendung zugreifen können. Sie können Objekte eines beliebigen Typs im Profil speichern. Das ASP.NET-Profilfeature stellt ein generisches Speichersystem dar, mit dem Sie praktisch alle Arten von Daten definieren und verwalten können. Trotzdem können Sie damit Daten typsicher zur Verfügung stellen.

Um Profileigenschaften zu verwenden, müssen Sie einen Profilanbieter konfigurieren. ASP.NET enthält eine SqlProfileProvider-Klasse, mit der Sie Profildaten in einer SQL-Datenbank speichern können. Sie können jedoch auch eine eigene Profilanbieterklasse erstellen, die Profildaten in einem benutzerdefinierten Format und mit einem benutzerdefinierten Speichermechanismus speichert (z. B. in einer XML-Datei und sogar in einem Webdienst).

Da in Profileigenschaften gespeicherte Daten nicht im Anwendungsspeicher gespeichert werden, bleiben sie auch bei Neustarts der Internetinformationsdienste (IIS) und des Workerprozesses vollständig erhalten. Außerdem können Profileigenschaften auch über mehre Prozesse hinweg erhalten bleiben, z. B. in einer Webfarm oder in einem Webgarten. Weitere Informationen finden Sie unter Übersicht über ASP.NET-Profileigenschaften.

Siehe auch

Konzepte

Empfehlungen zur ASP.NET-Zustandsverwaltung

Übersicht über ASP.NET-Cookies

Übersicht über den ASP.NET-Ansichtszustand

Übersicht über den ASP.NET-Sitzungszustand

Übersicht über den ASP.NET-Anwendungszustand

Übersicht über ASP.NET-Profileigenschaften