it-swarm.com.de

So löschen Sie Cookies auf einer ASP.NET-Website

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?

73
lock

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.

125
Kirill

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():

  • Alle Schlüssel-Wert-Paare aus der 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:

  • Cookie mit Sitzungs-ID (wenn Ihre Anwendung Cookies für Sitzungs-ID-Speicher verwendet, die standardmäßig verwendet wird), wird gelöscht
42
VMAtm

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();
        }
    }
22
pixelbits

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.

8
Buh Buh

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.

http://support.Microsoft.com/kb/899918

4
MTs

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
    }
2

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. 

1
Ahsan

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();
0
Said Al Souti

Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)

0
Noman Chali