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.

  • 🌐 Zustandloses HTTP: HTTP speichert keine Daten zwischen Anfragen, daher fügt ASP.NET Mechanismen hinzu, um den Zustand zu erhalten.
  • 🗂️ ViewState: ViewState überträgt Steuerungswerte automatisch von einer Seite zur nächsten.
  • 🔑 Sitzungsobjekt: Session[“Key”] speichert und ruft Schlüssel-Wert-Paare während des gesamten Anwendungslebenszyklus ab.
  • ⚙️ Zustandsmodi: Der Sitzungsstatus kann in der Sitzungsverarbeitung, auf einem StateServer, in SQL Server oder in einem benutzerdefinierten Speicher abgelegt werden.
  • Timeout: Der sessionState-Timeout in web.config steuert, wie lange eine Sitzung aktiv bleibt.

ASP.NET-Sitzungsverwaltungs-Tutorial mit Beispiel

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.

Verwenden Sie das Sitzungsobjekt

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:-

  1. 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.
  2. 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.
  3. 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:

Verwenden Sie das Sitzungsobjekt

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.

Häufig gestellte Fragen

Ja. KI-Assistenten können den Code generieren, um Sitzungswerte zu speichern und zu lesen, den richtigen Statusmodus vorzuschlagen und die web.config-Einstellungen zu schreiben. RevPrüfen Sie den generierten Code, um sicherzustellen, dass er Ihren Skalierbarkeits- und Sicherheitsanforderungen entspricht.

Ja. KI-basierte Code-Review-Tools können Risiken wie Session-Fixierung, fehlende HTTPS-Cookies oder die Speicherung sensibler Daten in der Session aufzeigen. Nutzen Sie die Ergebnisse als Hinweise und bestätigen Sie die Korrekturen vor der Bereitstellung durch Sicherheitstests.

Der Sitzungsstatus speichert Daten für die Sitzung eines einzelnen Benutzers, während der Anwendungsstatus Daten speichert, die von allen Benutzern der Anwendung gemeinsam genutzt werden. Verwenden Sie den Sitzungsstatus für benutzerbezogene Werte und den Anwendungsstatus für globale Daten wie Zähler oder Konfigurationen.

Nein. Jeder Benutzer erhält eine separate Sitzung, die durch eine eindeutige Sitzungs-ID in einem Cookie identifiziert wird. Ein Benutzer kann die Sitzungswerte eines anderen Benutzers nicht lesen; daher werden Sitzungen für benutzerbezogene Daten verwendet.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: