ASP.NET-Sitzungsverwaltung [Beispiel]
⚡ Intelligente Zusammenfassung
Die ASP.NET-Sitzungsverwaltung ermöglicht es einer zustandslosen HTTP-Anwendung, Benutzerdaten über mehrere Anfragen hinweg zu speichern. Sie erklärt ViewState, das Session-Objekt zum Speichern von Schlüssel-Wert-Paaren, ein praktisches Beispiel, Sitzungsstatusmodi, Timeout-Konfiguration und die Vorteile des Sitzungsstatus.
ASP.NET-Sitzungsverwaltung
Das HTTP-Protokoll, auf dem alle Webanwendungen arbeiten, ist ein zustandsloses Protokoll. Mit zustandslos ist lediglich gemeint, dass Informationen nicht von einer Anfrage zur anderen gespeichert werden.
Wenn Sie beispielsweise eine Anmeldeseite mit zwei Textfeldern haben, eines für den Namen und eines für das Kennwort, muss die Anwendung sicherstellen, dass Benutzername und Kennwort an die nächste Seite weitergegeben werden, wenn Sie auf dieser Seite auf die Schaltfläche „Anmelden“ klicken.
In ASP.NET geschieht dies auf verschiedene Weise. Die erste Möglichkeit ist das sogenannte ViewState. Hier speichert ASP.NET automatisch den Inhalt aller Steuerelemente und stellt sicher, dass dieser an die nächste Seite übergeben wird. Dies geschieht über eine Eigenschaft namens ViewState.
Für einen Entwickler ist es nicht ideal, irgendetwas am Ansichtsstatus zu ändern. Dies liegt daran, dass es nur von ASP.Net verarbeitet werden sollte.
ASP.NET-Sitzungsobjekt
Die andere Möglichkeit besteht darin, ein Objekt namens „Sitzungsobjekt“ zu verwenden. Das Session-Objekt ist während des gesamten Lebenszyklus der Anwendung verfügbar. Sie können beliebig viele Schlüssel-Wert-Paare im Session-Objekt speichern. Sie können also auf jeder Seite über die folgende Codezeile einen Wert im Session-Objekt speichern.
Session["Key"] = value
Der Wert wird in einem Session-Objekt gespeichert, wobei der Schlüssel als Name dient. Dadurch kann der Wert später abgerufen werden. Um einen Wert abzurufen, verwenden Sie einfach die folgende Anweisung.
Session["Key"]
Beispiel für ein ASP.NET-Sitzungsobjekt
In unserem Beispiel verwenden wir das Session-Objekt, um den im Namensfeld der Seite eingegebenen Namen zu speichern. Anschließend rufen wir diesen Wert ab und zeigen ihn entsprechend auf der Seite an. Fügen wir den folgenden Code in die Datei Demo.aspx.cs ein.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Erläuterung:-
- Die erste Codezeile liest den Wert des Textfelds „Name“ aus und speichert ihn im Session-Objekt. Durch die Angabe von Session["Name"] wird der Eigenschaft der Name „Name“ zugewiesen. Dadurch lässt sie sich später leichter wiederfinden.
- Die nächste Codezeile ruft den gespeicherten Wert aus dem Session-Objekt ab. Anschließend schreibt er diesen Wert über die Methode „Response.Write“ zurück an den Client.
- Abschließend blenden wir alle Steuerelemente des Formulars aus. Andernfalls werden alle Steuerelemente zusammen mit den Antwortwerten angezeigt.
Sobald Sie die oben genannten Änderungen vorgenommen haben, wird Ihnen die folgende Ausgabe angezeigt.
Ausgang:
Aus der Ausgabe können Sie ersehen, dass der Sitzungswert „Name“ abgerufen und im Browser angezeigt wurde.
ASP.NET-Sitzungsstatusmodi
ASP.NET kann Sitzungsdaten an verschiedenen Stellen speichern, die als Sitzungsstatusmodi bezeichnet werden. Der gewählte Modus beeinflusst Leistung, Skalierbarkeit und ob die Daten einen Neustart der Anwendung überstehen. Die folgende Tabelle vergleicht die Modi:
| Model | Wo der Zustand gespeichert wird | am besten für |
|---|---|---|
| InProc | Im Arbeitsspeicher des Webservers (Standardeinstellung) | Anwendungen auf einem einzelnen Server; am schnellsten, aber nach einem Neustart nicht mehr nutzbar. |
| StateServer | Ein separater ASP.NET-Statusdienstprozess | Webfarmen; übersteht Anwendungsneustarts |
| SQL Server | Eine SQL Server-Datenbank | Webfarmen, die einen dauerhaften, skalierbaren Zustand benötigen |
| Maßgeschneidert | Ein von Ihnen implementierter benutzerdefinierter Provider | Fachgeschäfte wie Redis |
| Off | Sitzungsstatus deaktiviert | Anwendungen, die keine Sitzungen benötigen |
InProc ist die Standardeinstellung und die schnellste Methode, aber bei Load-Balancing-Bereitstellungen sorgen StateServer oder SQLServer dafür, dass Sitzungen über mehrere Server hinweg verfügbar bleiben.
Wie konfiguriert man das Sitzungs-Timeout in ASP.NET?
Eine Sitzung ist nicht unbegrenzt gültig; sie läuft nach einer gewissen Inaktivitätszeit ab. Sie können dieses Timeout in der web.config-Datei mithilfe des sessionState-Elements festlegen, wobei der Timeout-Wert in Minuten angegeben wird:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Sie können es auch im Code festlegen mit Session.Timeout = 30;Die Standard-Timeout-Zeit beträgt 20 Minuten. Durch die Wahl eines kürzeren Timeouts wird der Serverspeicher schneller freigegeben und die Sicherheit erhöht, während ein längeres Timeout die Benutzer länger angemeldet hält.
Vor- und Nachteile des Session-States
Der Sitzungsstatus ist zwar praktisch, hat aber auch Nachteile, die Sie abwägen sollten, bevor Sie sich stark darauf verlassen.
Vorteile:
- Einfach zu verwenden zur Speicherung benutzerbezogener Daten, z. B. eines Shopsping Warenkorb- oder Anmeldedaten.
- Kann komplexe Objekte speichern, nicht nur Zeichenketten.
- Die Daten werden auf dem Server gespeichert und sind daher sicherer als bei clientseitiger Speicherung.
Nachteile:
- Der InProc-Modus verbraucht viel Serverspeicher und ist nicht für die Skalierung über eine Webfarm hinweg geeignet.
- Sitzungsdaten gehen verloren, wenn die Sitzung abläuft oder die Anwendung neu gestartet wird (im InProc-Modus).
- Die Speicherung großer Datenmengen pro Benutzer kann die Leistung unter hoher Last beeinträchtigen.



