wake-up-neo.com

Sitzung löschen

Frage 1

Ich möchte wissen, wann ich verwenden soll:

Session.Abandon () // Wenn ich dies während der Ablaufverfolgung und nach dem Aufrufen verwende, finde ich, dass die Sitzung noch einen Wert hat.

Und wann soll ich verwenden:

Session.Clear ()

Wann sollte ich die jeweilige Methode anwenden?


  • Im Allgemeinen?
  • In meinem speziellen Fall?

Ich überprüfe, ob die Sitzung beim Laden der Seite nicht gleich null ist. Wenn session gleich null ist, möchte ich session löschen und zur Anmeldeseite umleiten?

Soll ich so etwas benutzen:

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}
50

Wann sollte ich in ASP.NET Session.Clear () anstelle von Session.Abandon () verwenden?

Session.Abandon () zerstört die Sitzung und das Session_OnEnd-Ereignis wird ausgelöst.

Session.Clear () entfernt nur alle Werte (Inhalte) aus dem Objekt. Die Sitzung mit demselben Schlüssel ist noch aktiv.

Wenn Sie also Session.Abandon () verwenden, verlieren Sie diese bestimmte Sitzung und der Benutzer erhält einen neuen Sitzungsschlüssel. Sie können es beispielsweise verwenden, wenn sich der Benutzer abmeldet.

Verwenden Sie Session.Clear (), wenn Sie möchten, dass der Benutzer in derselben Sitzung bleibt (wenn Sie beispielsweise nicht möchten, dass er sich erneut anmeldet) und alle seine sitzungsspezifischen Daten zurücksetzt.

Was ist der Unterschied zwischen Session.Abandon () und Session.Clear ()

Löschen - Entfernt alle Schlüssel und Werte aus der Sitzungsstatussammlung.

Abbrechen - Entfernt alle in einer Sitzung gespeicherten Objekte. Wenn Sie die Abandon-Methode nicht explizit aufrufen, entfernt der Server diese Objekte und zerstört die Sitzung, wenn das Sitzungszeitlimit überschritten wird. Es löst auch Ereignisse wie Session_End aus.

Session.Clear ist vergleichbar mit dem Entfernen aller Bücher aus dem Regal, während Session.Abandon eher dem Wegwerfen des gesamten Regals gleicht.

...

Im Allgemeinen müssen Sie in den meisten Fällen Session.Clear verwenden. Sie können Session.Abandon verwenden, wenn Sie sicher sind, dass der Benutzer Ihre Website verlassen wird.

Also zurück zu den Unterschieden:

  • Abbruch löst Session_End-Anforderung aus.
  • Löschen entfernt Objekte sofort, Abbrechen nicht.
  • Abbruch gibt das SessionState-Objekt und seine Elemente frei, damit der gesammelte Müll entsorgt werden kann.
  • Clear behält den SessionState und die damit verbundenen Ressourcen bei.

Session.Clear () oder Session.Abandon ()?

Sie verwenden Session.Clear (), wenn Sie die Sitzung nicht beenden möchten, sondern nur alle Schlüssel in der Sitzung löschen und die Sitzung neu initialisieren möchten.

Session.Clear () bewirkt nicht, dass der Session_End-Eventhandler in Ihrer Global.asax-Datei ausgeführt wird.

Andererseits entfernt Session.Abandon () die Sitzung vollständig und führt den Eventhandler Session_End aus.

Session.Clear () ist wie das Entfernen von Büchern aus dem Bücherregal

Session.Abandon () ist wie das Bücherregal selbst zu werfen.

Frage

Ich überprüfe einige Sitzungen, wenn sie beim Laden der Seite nicht gleich null sind. Wenn einer von ihnen gleich null ist, möchte ich alle Sitzungen löschen und zur Anmeldeseite umleiten.

Antwort

Wenn Sie möchten, dass sich der Benutzer erneut anmeldet, verwenden Sie Session.Abandon.

94
Mike Veigel

Fand diesen Artikel im Netz, sehr relevant zu diesem Thema. Also hier posten.

ASP.NET-Interna - Löschen von ASP.NET-Sitzungsvariablen

3
Saanch

Der andere große Unterschied ist, dass Abandon Elemente nicht sofort entfernt, sondern bei der anschließenden Bereinigung eine Schleife über Sitzungselemente durchführt, um zu überprüfen, ob STA COM-Objekte vorhanden sind, die speziell behandelt werden müssen. nd das kann ein Problem sein.

Unter hoher Last können zwei (oder mehr) Anfragen für dieselbe Sitzung an den Server gesendet werden (dh zwei Anfragen mit demselben Sitzungscookie). Ihre Ausführung wird serialisiert, aber da Abandon die Elemente nicht synchron löscht, sondern ein Flag setzt, können beide Anforderungen ausgeführt werden und beide Anforderungen, um ein Arbeitselement zu planen, um die Sitzung "später" zu löschen. Diese beiden Arbeitselemente können dann gleichzeitig ausgeführt werden, und beide prüfen die Sitzungsobjekte und beide bereinigen das Array von Objekten. Was passiert, wenn zwei Dinge über eine Liste iteriert und geändert werden? Boom! Und da dies in einem Queueuser Workitem-Rückruf geschieht und NICHT in einem Try/Catch (danke MS) erfolgt, wird Ihre gesamte App-Domain heruntergefahren. War dort.

3
Walden Leverich