Frage

Sowohl Session.Clear () und Session.Abandon () erhalten von Session-Variablen zu befreien. Wie ich es verstehe, beendet die aktuelle Sitzung Abandon () und bewirkt, dass eine neue Sitzung erstellt das Ende so zu verursachen und Startereignisse ausgelöst.

Es scheint, bevorzugt in den meisten Fällen, wie zum Beispiel der Anmeldung eines Benutzers aus Abandon () aufrufen. Gibt es Situationen, in denen ich Clear () stattdessen verwenden würde? Gibt es viel von einem Performance-Unterschied?

War es hilfreich?

Lösung

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

Session.Clear() nur entfernt alle Werte (Inhalt) aus dem Objekt. Die Sitzung mit dem gleichen Schlüssel noch am Leben ist.

Wenn Sie also Session.Abandon() verwenden, verlieren Sie, dass bestimmte Sitzung und der Benutzer einen neuen Sitzungsschlüssel erhalten. Man könnte es zum Beispiel verwenden, wenn sich der Benutzer abmeldet.

Verwenden Session.Clear(), wenn Sie möchten, dass der Benutzer in der gleichen Sitzung verbleibenden (wenn der Benutzer zum Beispiel auf relogin nicht wollen) und setzen Sie die alle spezifischen Datensitzung.

Andere Tipps

Nur Session.Clear () verwendet, wenn ein Benutzer abmeldet kann eine Sicherheitslücke darstellen. Als die Sitzung noch gültig ist, so weit das Web Server betroffen ist. Es ist dann eine ziemlich triviale Angelegenheit zu riechen, und ergreifen Sie die Sitzungs-ID und kapern diese Sitzung.

Aus diesem Grunde kann, wenn aus einem Benutzer anmelden würde es sicherer und vernünftiger sein Session.Abandon () zu verwenden, so dass die Sitzung zerstört wird, und eine neue Sitzung erstellt (auch wenn die Logout-UI Seite Teil der sein würde neue Sitzung, die neue Sitzung eine der Benutzer Angaben nicht haben würde und die neue Session Hijacking würde eine neue Sitzung mit, daher wäre es stumm sein).

äquivalent

Ich bin immer noch nicht sicher, was ein Beispiel aus der Praxis ist, wo Sie Session.Abondon() verwenden würden, Session.Clear().

kann ich verstehen ... wenn der Benutzer Ihre Logout-Link klickt, und nehmen Sie sie zu Ihrem „Sie gewesen sind abgemeldet“ Seite .... ihre Browser-Sitzung noch fortgesetzt, aber Sie wollen die Informationen entfernen, gespeichert in die Sitzung. Wenn Sie die Sitzung abondoned dann eine neue Sitzung würde für die erzeugte sofort werden „haben Sie abgemeldet worden“ Seite.

Session.Abandon zerstört die Sitzung, wie oben angegeben, so dass Sie diese verwenden sollen, wenn jemand aus der Anmeldung. Ich denke, eine gute Nutzung der Session.Clear für einen Warenkorb auf einer E-Commerce-Website sein würde. Auf diese Weise der Korb, ohne sich abzumelden den Benutzer gelöscht wird.

hatte ich dieses Problem und versucht, beide, hatte aber zum Entfernen von Mist wie „pageEditState“, zu regeln, aber nicht die Benutzerinformationen zu entfernen, damit ich es sehen müssen wieder auf.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top