Übersicht:
Klicken Sie, um sich von der Website abzumelden. Wenn Sie nur zur Anmelde-/Ausstiegsseite weitergeleitet werden, geben Sie nach der Anmeldung die Adresse einer Seite ein, z. B. der Startseite. Sie werden feststellen, dass Sie sich nicht anmelden müssen, um darauf zuzugreifen. Dieser sogenannte Exit ist nicht sicher.
Wie kommt man also sicher raus?
Das heißt, die entsprechende Sitzung oder das entsprechende Cookie zu löschen, nachdem Sie zum Beenden geklickt haben.
Code zum Löschen der Sitzung:
Session.Clear(); Session.Abandon();
Korrekter Code zum Löschen des Cookies (vorausgesetzt, der Cookie-Name ist UserInfo):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1); }
Wenn Sie alle Cookies löschen müssen, gehen Sie zu:
for (int i = 0; i <Response.Cookies.Count; i++) { Response.Cookies[i].Expires = DateTime.Now.AddDays(-1); }
Cookie löschen Fehlercode (vorausgesetzt, der Cookie-Name lautet „UserInfo“):
if (Request.Cookies["UserInfo"] != null) { Response.Cookies.Remove("UserInfo"); }
Sie werden feststellen, dass das Cookie nach dieser Verarbeitung noch vorhanden ist. Warum kann es nicht? gelöscht werden? Werfen wir einen Blick auf den Quellcode der HttpCookieCollection-Implementierung von .NET:
public void Remove(string name) { if (this._response != null) { this._response.BeforeCookieCollectionChange(); } this.RemoveCookie(name); if (this._response != null) { this._response.OnCookieCollectionChange(); } }
Dieser Vorgang löscht Cookies in der HttpCookieCollection-Sammlung, wenn der Server die Daten an den Server überträgt client Wenn es an den Server gesendet wird, enthält es keine Informationen über das auf dem Server gelöschte Cookie und der Browser nimmt keine Änderungen daran vor (die Remove-Methode verhindert lediglich, dass der Server das gelöschte Cookie an den Client sendet . Bei diesem Cookie spielt es keine Rolle, ob es auf dem Client-Rechner verbleibt oder nicht. Daher gibt es eine Situation, in der das Cookie nicht gelöscht werden kann.
Da Response.Cookies.Remove nicht den von uns benötigten Effekt erzielen kann, warum behält Microsoft es trotzdem bei? Da CookieCollection die ICollection-Schnittstelle implementiert, ist romove eine Methode, die implementiert werden muss, obwohl sie wenig praktischen Wert hat. Die Sammlung romove sollte auch auf diese Weise implementiert werden, aber als Microsoft MSDN schrieb, war die Beschreibung zu unklar, was uns viel Ärger bereitete.
Im Folgenden finden Sie eine Zusammenfassung verschiedener Möglichkeiten zum sicheren Beenden:
1). Verwenden Sie Serversteuerelemente wie Linkbutton und Button zum Beenden.
Diese Methode ist am besten: direkt Schreiben Sie einfach den Code, um die Sitzung oder das Cookie im entsprechenden Fall der Serversteuerung zu löschen.
2). Verwenden Sie HTML-Tags wie Logout zum Beenden.
Für das spezielle Tag kann es wie folgt implementiert werden Dies: < ;a href="logout.aspx">Logout Schreiben Sie einfach den Code zum Löschen der Sitzung oder des Cookies im Page_Load-Ereignis von logout.aspx.
Für HTML-Tags wie können Sie Js-Ajax oder jQuery-Ajax im entsprechenden Client-Ereignis des HTML-Tags verwenden, um das Löschen im allgemeinen Handler (.ashx) zu schreiben ) Sitzungs- oder Cookie-Code reicht aus.
Für HTML-Tags wie können Sie auch Folgendes tun: Fügen Sie der aktuellen Seite ein Serversteuerelement wie Button hinzu, fügen Sie es in ein Div ein und blenden Sie es aus (Hinweis : Ausblenden ist nicht sichtbar und kann nicht über das Serverattribut Visible=False erreicht werden, was nur durch Festlegen von display:none; des div erreicht werden kann. Schreiben Sie dann den Code zum Löschen der Sitzung oder des Cookies im Serverereignis Cilck; Rufen Sie es mit Js oder jQuery im entsprechenden Client-Ereignis der HTML-Markierung auf. Das Click-Ereignis des Button-Steuerelements ist ausreichend (der Button wird ausgeblendet, indem die Servereigenschaft Visible=False gesetzt wird, und das Click-Ereignis des Button-Steuerelements wird von JS oder aufgerufen jQuery wird ungültig sein).