Was ist der Unterschied zwischen dem Zerstören einer Sitzung und dem Entfernen ihrer Werte? Können Sie bitte ein Beispiel dafür angeben?
Ich habe nach dieser Frage gesucht, aber keine vollständige Antwort erhalten. Einige Antworten sind:
Session.Abandon()
zerstört die SitzungSession.Clear()
entfernt einfach alle Werte
Ein Freund sagte mir Folgendes:
Durch das Löschen der Sitzung wird die Sitzung nicht deaktiviert. Sie ist weiterhin mit derselben ID für den Benutzer vorhanden, die Werte werden jedoch einfach gelöscht.
Durch den Abbruch wird die Sitzung vollständig zerstört. Dies bedeutet, dass Sie eine neue Sitzung beginnen müssen, bevor Sie weitere Werte in der Sitzung für diesen Benutzer speichern können.
Der folgende Code funktioniert und löst keine Ausnahmen aus.
Session.Abandon();
Session["tempKey1"] = "tempValue1";
Wenn Sie eine Sitzung abbrechen (), erhalten Sie (oder besser gesagt der Benutzer) eine neue Sitzungs-ID
Wenn ich die Sitzung teste, ändert sich nichts, wenn ich die Sitzung abbreche.
Ich finde nur einen Unterschied:
session.Abandon()
Erhöht das Session_End
Ereignis
quelle
Antworten:
Löschen - Entfernt alle Schlüssel und Werte aus der Sitzungsstatuserfassung.
Abbruch - 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 die Sitzung abgelaufen ist.
Es werden auch Ereignisse wie Session_End ausgelöst .
Session.Clear kann mit verglichen werden Entfernen aller Bücher aus dem Regal , während Session.Abandon eher dem Wegwerfen des gesamten Regals gleicht .
Du sagst:
Dies ist korrekt, während Sie dies nur innerhalb einer Anfrage tun .
Bei der nächsten Anfrage wird die Sitzung anders sein. Die Sitzungs-ID kann jedoch wiederverwendet werden sodass die ID gleich bleibt.
Wenn Sie Session.Clear verwenden, haben Sie in vielen Anfragen dieselbe Sitzung.
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 Site verlassen wird.
Also zurück zu den Unterschieden:
quelle
Session.Clear
dies mit dem sofortigen Entfernen aller Bücher aus dem Regal verglichen werden kann , währendSession.Abandon
es eher so ist , als würde man sagen "Wirf das ganze Regal weg und lass es mich wissen, wenn du fertig bist ".Wenn Sie
Abandon()
eine Sitzung durchführen, erhalten Sie (oder besser gesagt der Benutzer) eine neue Sitzungs-ID (bei der nächsten Anforderung). Wenn SieClear()
eine Sitzung durchführen, werden alle gespeicherten Werte entfernt, die Sitzungs-ID bleibt jedoch erhalten.quelle
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()
löscht die Werte aller Schlüssel, löst jedoch NICHT das Ereignis zum Beenden der Sitzung aus.Session.Abandon()
löscht NICHT die Werte der aktuellen Anforderung. Wenn eine andere Seite angefordert wird, werden die Werte für diese Seite gelöscht. Verlassen Sie jedoch wird das Ereignis werfen.Also, in meinem Fall (und vielleicht in Ihrem?) Musste ich
Clear()
gefolgt vonAbandon()
.quelle
Dies liegt daran, dass beim Aufrufen der Abandon-Methode das aktuelle Sitzungsobjekt zum Löschen in die Warteschlange gestellt wird, jedoch erst dann gelöscht wird, wenn alle Skriptbefehle auf der aktuellen Seite verarbeitet wurden. Dies bedeutet, dass Sie auf Variablen zugreifen können, die im Sitzungsobjekt auf derselben Seite wie der Aufruf der Abandon-Methode gespeichert sind, jedoch nicht auf nachfolgenden Webseiten.
Im folgenden Skript wird beispielsweise in der dritten Zeile der Wert Mary gedruckt. Dies liegt daran, dass das Sitzungsobjekt erst zerstört wird, wenn der Server die Verarbeitung des Skripts abgeschlossen hat.
Wenn Sie auf einer nachfolgenden Webseite auf die Variable MyName zugreifen, ist diese leer. Dies liegt daran, dass MyName mit dem vorherigen Sitzungsobjekt zerstört wurde, als die Seite mit dem vorherigen Beispiel die Verarbeitung beendet hat.
von MSDN Session.Abandon
quelle
Durch das Löschen einer Sitzung werden die dort gespeicherten Werte entfernt, Sie können dort jedoch immer noch neue hinzufügen. Nach dem Zerstören der Sitzung können Sie dort keine neuen Werte hinzufügen.
quelle
Löschen Sie den Schlüssel oder die Werte aus der Sitzungsstatuserfassung.
Abbruch - Entfernen oder Löschen von Sitzungsobjekten aus der Sitzung.
quelle
wird die gesamte Sitzung zerstören / töten.
Entfernt / löscht die Sitzungsdaten (dh die Schlüssel und Werte aus der aktuellen Sitzung), aber die Sitzung ist aktiv.
Im Vergleich zur Session.Abandon () -Methode erstellt Session.Clear () keine neue Sitzung, sondern setzt alle Variablen in der Sitzung auf NULL.
Die Sitzungs-ID bleibt in beiden Fällen gleich, solange der Browser nicht geschlossen ist.
Es entfernt alle Schlüssel und Werte aus der Sitzungsstatuserfassung.
Es löscht ein Element aus der Sitzungsstatuserfassung.
Es löscht ein Element an einem angegebenen Index aus der Sitzungsstatuserfassung.
Diese Eigenschaft gibt den Zeitüberschreitungszeitraum an, der dem Sitzungsobjekt für die Anwendung zugewiesen ist. (Die Zeit wird in Minuten angegeben).
Wenn der Benutzer innerhalb des Zeitlimits keine Seite aktualisiert oder anfordert, endet die Sitzung.
quelle
Das Vorhandensein einer Sitzungs-ID kann zu einem Angriff auf die Sitzungsfixierung führen, der einer der Gründe für die PCI-Konformität ist. Lesen Sie diese Lösung , um die Sitzungs- ID zu entfernen und den Angriff auf die Sitzungsfixierung zu überwinden. - Wie vermeide ich die Sicherheitsanfälligkeit bezüglich der Sitzungsfixierung in ASP.NET? .
quelle
Ich denke, es wäre praktisch zu verwenden,
Session.Clear()
anstatt zu verwendenSession.Abandon()
.Weil die Werte nach einem späteren Aufruf noch in der Sitzung vorhanden sind, aber nach dem Aufruf des ersteren entfernt werden.
quelle
Hierbei ist zu beachten, dass Session.Clear Elemente sofort entfernt, Session.Abandon jedoch die Sitzung markiert, die am Ende der aktuellen Anforderung abgebrochen werden soll. Das bedeutet einfach, dass Sie, nachdem Sie den Befehl session.abandon ausgeführt haben, versucht haben, auf den Wert im Code zuzugreifen, dieser weiterhin vorhanden ist. Seien Sie also nicht verwirrt, wenn Ihr Code auch nach der Ausgabe des Befehls session.abandon und der sofortigen Ausführung einer Logik mit der Sitzung nicht funktioniert.
quelle