Wenn der Benutzer auf meiner Website auf die Schaltfläche "Abmelden" klickt, wird die Seite Logout.aspx mit dem Code Session.Clear()
geladen.
Löschen Sie in ASP.NET/C# alle Cookies? Oder muss noch ein anderer Code hinzugefügt werden, um alle Cookies meiner Website zu entfernen?
Versuchen Sie so etwas:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
Aber es macht auch Sinn zu benutzen
Session.Abandon();
außerdem in vielen szenarien.
Nein, Cookies können nur durch Einstellen des Ablaufdatums für jeden von ihnen gelöscht werden.
if (Request.Cookies["UserSettings"] != null)
{
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
Im Moment von Session.Clear()
:
Session
-Sammlung werden entfernt. Das Session_End
-Ereignis findet nicht statt.Wenn Sie diese Methode während der Abmeldung verwenden, sollten Sie auch die Session.Abandon
-Methode für das Session_End
-Ereignis verwenden:
Das ist was ich benutze:
private void ExpireAllCookies()
{
if (HttpContext.Current != null)
{
int cookieCount = HttpContext.Current.Request.Cookies.Count;
for (var i = 0; i < cookieCount; i++)
{
var cookie = HttpContext.Current.Request.Cookies[i];
if (cookie != null)
{
var expiredCookie = new HttpCookie(cookie.Name) {
Expires = DateTime.Now.AddDays(-1),
Domain = cookie.Domain
};
HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
}
}
// clear cookies server side
HttpContext.Current.Request.Cookies.Clear();
}
}
Das Einstellen von "Expires" hat für mich leider nicht immer funktioniert. Der Keks war nicht betroffen.
Dieser Code hat für mich funktioniert:
HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
dabei ist "ASP.NET_SessionId"
der Name des Cookies. Der Cookie wird dadurch nicht wirklich gelöscht, sondern mit einem leeren Cookie überschrieben, was für mich nahe genug war.
Ich möchte nur darauf hinweisen, dass das Session-ID-Cookie nicht entfernt wird, wenn Session.Abandon verwendet wird, wie andere sagten.
Wenn Sie eine Sitzung abbrechen, wird das Sitzungs-ID-Cookie nicht aus .__ entfernt. der Browser des Benutzers. Deshalb, sobald die Sitzung war aufgegeben, verwenden alle neuen Anforderungen an dieselbe Anwendung dieselbe Sitzungs-ID, hat jedoch eine neue Instanz des Sitzungsstatus. Gleichzeitig Uhrzeit, wenn der Benutzer eine andere Anwendung innerhalb desselben DNS öffnet Domäne verliert der Benutzer seinen Sitzungsstatus nach dem Abbruch nicht Methode wird aus einer Anwendung aufgerufen.
Manchmal möchten Sie möglicherweise die Sitzungs-ID nicht wiederverwenden. Wenn ja, und wenn Wenn Sie die Konsequenzen verstehen, die Sitzungs-ID nicht erneut zu verwenden, verwenden Sie Im folgenden Codebeispiel können Sie eine Sitzung abbrechen und die .__ löschen. Sitzungs-ID-Cookie:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
In diesem Codebeispiel wird der Sitzungsstatus vom Server gelöscht und .__ festgelegt. das Cookie für den Sitzungsstatus auf null setzen. Der Nullwert löscht effektiv das Cookie aus dem Browser.
Sie sollten das Passwort niemals als Cookie speichern. Um ein Cookie zu löschen, müssen Sie es nur ändern und ablaufen lassen. Sie können es nicht wirklich löschen, dh von der Festplatte des Benutzers entfernen.
Hier ist ein Beispiel:
HttpCookie aCookie;
string cookieName;
int limit = Request.Cookies.Count;
for (int i=0; i<limit; i++)
{
cookieName = Request.Cookies[i].Name;
aCookie = new HttpCookie(cookieName);
aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
Response.Cookies.Add(aCookie); // overwrite it
}
Unter dem Titel der OP-Frage werden alle Cookies gelöscht - "Cookies auf der Website löschen"
Ich bin irgendwo im Internet auf Code von Dave Domagala gestoßen. Ich habe Dave's bearbeitet, um auch Google Analytics-Cookies zuzulassen, die alle auf der Website gefundenen Cookies durchlaufen und alle gelöscht haben. (Aus Entwicklersicht - das Aktualisieren von neuem Code in eine vorhandene Website ist eine nette Berührung, um Probleme mit Benutzern zu vermeiden, die die Site erneut besuchen.).
Ich verwende den folgenden Code zusammen mit dem Lesen der Cookies zuerst, halte alle erforderlichen Daten und setze dann die Cookies zurück, nachdem ich mit der folgenden Schleife alles gereinigt hatte.
Der Code:
int limit = Request.Cookies.Count; //Get the number of cookies and
//use that as the limit.
HttpCookie aCookie; //Instantiate a cookie placeholder
string cookieName;
//Loop through the cookies
for(int i = 0; i < limit; i++)
{
cookieName = Request.Cookies[i].Name; //get the name of the current cookie
aCookie = new HttpCookie(cookieName); //create a new cookie with the same
// name as the one you're deleting
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date
//in the past deletes the cookie
Response.Cookies.Add(aCookie); //Set the cookie to delete it.
}
Zusatz: Wenn Sie Google Analytics verwenden
Die obige Schleife/Löschung löscht ALLE Cookies für die Website. Wenn Sie also Google Analytics verwenden, ist es wahrscheinlich nützlich, den __utmz-Cookie beizubehalten, da dieser feststellt, woher der Besucher kam, welche Suchmaschine verwendet wurde und was Auf den Link wurde geklickt, welches Keyword wurde verwendet und wo waren diese auf der Welt, als auf Ihre Website zugegriffen wurde.
Um es zu behalten, wickeln Sie eine einfache if-Anweisung ein, sobald der Name des Cookies bekannt ist:
...
aCookie = new HttpCookie(cookieName);
if (aCookie.Name != "__utmz")
{
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(aCookie);
}
Obwohl dies ein alter Thread ist, dachte ich mir, ob jemand noch in der Zukunft nach einer Lösung sucht.
HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);
Das war es, was für mich der Trick war.
Es ist jetzt 2018, also gibt es in ASP.NET Core eine direkte Funktion. Um ein Cookie zu löschen, versuchen Sie diesen Code:
if(Request.Cookies["aa"] != null)
{
Response.Cookies.Delete("aa");
}
return View();
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)