Frage

Was ist der Unterschied zwischen einer Sitzung zu zerstören und seine Werte zu entfernen? Können Sie mir bitte ein Beispiel demonstriert das?

liefern

ich für diese Frage gesucht, aber nicht begreifen nicht geantwortet. Einige Antworten sind:

  • Session.Abandon() zerstört die Sitzung
  • Session.Clear() entfernt nur alle Werte

Ein Freund erzählte mir dies:

  

die Sitzung Clearing wird nicht ungesetzt   die Sitzung, es besteht nach wie vor mit der   gleiche ID für den Benutzer, sondern mit der   Werte einfach gelöscht.

     

die Sitzung Abandon zerstört   vollständig bedeutet, dass Sie benötigen, um   eine neue Sitzung beginnen, bevor Sie können   speichern Sie alle mehr Werte in der Session   für diesen Benutzer.

Der Code unten funktioniert und wirft keine Ausnahmen.

Session.Abandon();
Session["tempKey1"] = "tempValue1";
  

Wenn Sie Abandon () eine Session, Sie (oder   eher den Benutzer) wird ein neues bekommen   SessionId

Wenn ich Session testen, es ist macht keine Änderung, wenn ich die Sitzung Abandon.

Ich finde nur einen Unterschied: session.Abandon() wirft Session_End Ereignis

War es hilfreich?

Lösung

löschen - Entfernt alle Schlüssel und Werte aus der Sitzungszustandsauflistung.

Abandon - entfernt alle in einer Session gespeicherten Objekte. Wenn Sie die Abandon Methode nicht explizit aufrufen, entfernt der Server diese Objekte und zerstört die Sitzung, wenn die Sitzung abläuft.
Es wirft auch Veranstaltungen wie Session_End .

Session.Clear kann verglichen werden Entfernen Sie alle Bücher aus dem Regal , während Session.Abandon mehr wie ist wirft das ganze Regal weg .

Sie sagen:

  

Wenn ich Session testen, es ist macht keine Änderung, wenn ich die Sitzung Abandon.

Das ist richtig, während Sie es tun, innerhalb einer Anfrage nur .
Auf der nächsten Anforderung wird die Sitzung unterschiedlich sein. Aber die Sitzungs-ID wiederverwendet werden kann so dass die ID wird gleich bleiben.

Wenn Sie Session.Clear verwenden Sie die gleiche Sitzung in vielen Anfragen haben.

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

Also zurück zu den Unterschieden:

  1. Abandon Raises Session_End Anfrage.
  2. Löschen entfernt Elemente immidiately, Abandon nicht.
  3. Abandon gibt die Session Objekt und seine Produkte, so dass es ba Müll gesammelt wird, kann die Ressourcen freizugeben. Klar hält Session und Ressourcen mit ihr verbunden sind.

Andere Tipps

Wenn Sie eine Session Abandon(), Sie (oder besser gesagt der Benutzer) ein neues SessionId (auf der nächsten Anfrage) erhalten. Wenn Sie eine Session Clear(), werden alle gespeicherten Werte entfernt, aber die SessionId intakt bleibt.

Dies ist Art von oben durch die verschiedenen Antworten bedeckt, aber das erste Mal, dass ich diesen Artikel gelesen habe ich verpasst eine wichtige Tatsache, die zu einem kleinen Fehler in meinem Code geführt ...

Session.Clear() die Werte aller Schlüssel klar, aber nicht das Ende der Session-Ereignis verursacht Feuer.

Session.Abandon() löscht die Werte nicht auf der aktuellen Anforderung. Wenn eine andere Seite angefordert wird, werden die Werte für diesen einen gegangen. Allerdings verlassen die Veranstaltung werfen.

Also, in meinem Fall (und vielleicht in dir?), Ich brauchte Clear() von Abandon() gefolgt.

  

Dieser Code funktioniert und nicht jede Ausnahme werfen:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

Es ist, weil, wenn die Abandon-Methode aufgerufen wird, wird das aktuelle Session-Objekt zum Löschen der Warteschlange ist aber nicht tatsächlich gelöscht, bis die gesamte Skript auf der aktuellen Seite Befehle verarbeitet wurde. Dies bedeutet, dass Sie im Session-Objekt gespeicherten Variablen auf der gleichen Seite wie der Aufruf der Methode Abandon zugreifen können, aber nicht in allen nachfolgenden Web-Seiten.

Zum Beispiel in folgenden Skript druckt die dritte Zeile den Wert Mary. Dies liegt daran, das Session-Objekt nicht zerstört wird, bis der Server die Verarbeitung des Skripts beendet ist.

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>

Wenn Sie die Variable MyName auf einen der folgenden Web-Seite zugreifen, ist es leer. Dies liegt daran, MyName wurde mit dem vorherigen Session-Objekt zerstört, wenn die Seite des vorherige Beispiel fertig Verarbeitung enthält.

MSDN Session.Abandon

eine Session löschen entfernt die Werte, die dort gespeichert wurden, aber Sie können immer noch neue dort hinzufügen. Nach der Sitzung zerstören können Sie dort neue Werte hinzufügen nicht.

klar seine Entfernen-Taste oder Werte von Sitzungsstatus Sammlung ..

verlassen-its entfernen oder gelöscht Sitzungsobjekte von Sitzung ..

Session.Abandon() 

zerstören / tötet die gesamte Sitzung.

Session.Clear()

entfernt / die Sitzungsdaten löscht (das heißt die Schlüssel und Werte aus der aktuellen Sitzung), aber die Sitzung am Leben sein.

Vergleichen

zu Session.Abandon () -Methode, Session.Clear () nicht die neue Sitzung erstellen, es nur alle Variablen in der Sitzung macht auf NULL.

Session-ID wird in gleich bleibt die beiden Fälle, solange der Browser nicht geschlossen ist.

Session.RemoveAll()

Es werden alle Schlüssel und Werte aus der Sitzungszustandsauflistung.

Session.Remove()

Es löscht ein Element aus der Sitzungszustandsauflistung.

Session.RemoveAt()

Es löscht ein Element an einem angegebenen Index aus der Sitzungszustandsauflistung.

Session.TimeOut()

Diese Eigenschaft gibt den Time-out Session-Objekt zugewiesen Zeitraum für die Anwendung. (Es wird die Zeit in Minuten angegeben werden).

Wenn der Benutzer nicht nicht aktualisieren oder eine Seite innerhalb der Timeout-Zeit anfordern, dann wird die Sitzung beendet.

Die Existenz von sessionid kann den Session-Fixation-Angriff verursachen, die eine des Punktes in der PCI-Compliance ist. Um die sessionid zu entfernen und den Session-Fixation-Angriff zu überwinden, lesen Sie diese Lösung - Wie die Session Fixierung Verwundbarkeit in ASP.NET vermeiden? .

ich denke, es wäre praktisch Session.Clear() zu verwenden, anstatt Session.Abandon() verwendet wird.

Da immer noch die Werte in der Sitzung existieren nach späteren Aufruf jedoch entfernt, nachdem der ehemalige aufrufen.

this code works and dont throw any exception:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

Eine Sache beachten hier, dass Session.Clear Artikel sofort entfernen, aber Session.Abandon markiert die Sitzung am Ende der aktuellen Anforderung aufgegeben werden. Das bedeutet einfach annehmen, dass Sie versucht haben, in Code für den Zugriff auf Wert kurz nach dem Session.Abandon Befehl ausgeführt wurde, wird es noch da sein. Also nicht verwirren lassen, wenn Ihr Code nur nicht einmal zu arbeiten, nachdem Session.Abandon Befehl ausgeben und sofort ein gewisse Logik mit der Sitzung zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top