web-dev-qa-db-fra.com

Comment supprimer les cookies sur un site Web ASP.NET

Sur mon site Web, lorsque l'utilisateur clique sur le bouton "Déconnexion", la page Logout.aspx se charge avec le code Session.Clear().

Dans ASP.NET/C#, cela efface-t-il tous les cookies? Ou y a-t-il un autre code à ajouter pour supprimer tous les cookies de mon site Web?

73
lock

Essayez quelque chose comme ça:

if (Request.Cookies["userId"] != null)
{
    Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);   
}

Mais il est également judicieux d’utiliser 

Session.Abandon();

d'ailleurs dans de nombreux scénarios.

125
Kirill

Non, les cookies ne peuvent être nettoyés qu'en en fixant la date d'expiration pour chacun d'eux.

if (Request.Cookies["UserSettings"] != null)
{
    HttpCookie myCookie = new HttpCookie("UserSettings");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

Au moment de Session.Clear():

  • Toutes les paires clé-valeur de la collection Session sont supprimées. L'événement Session_End n'est pas arrivé.

Si vous utilisez cette méthode lors de la déconnexion, vous devez également utiliser la méthode Session.Abandon pour l'événement Session_End:

  • Un cookie avec ID de session (si votre application utilise des cookies pour le magasin d'identifiants de session, qui est par défaut) est supprimé
42
VMAtm

C'est ce que j'utilise:

    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

Malheureusement, pour moi, le réglage "Expires" ne fonctionnait pas toujours. Le cookie n'a pas été affecté.

Ce code a fonctionné pour moi:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

"ASP.NET_SessionId" est le nom du cookie. Cela ne supprime pas vraiment le cookie, mais le remplace par un cookie vide, qui était assez proche pour moi.

8
Buh Buh

Je tiens simplement à souligner que le cookie d'identification de session n'est pas supprimé lors de l'utilisation de Session.Abandon, comme d'autres l'ont dit.

Lorsque vous abandonnez une session, le cookie d'identifiant de session n'est pas supprimé de le navigateur de l'utilisateur. Par conséquent, dès que la session a été abandonnée, toute nouvelle demande adressée à la même application utilisera la même ID de session mais aura une nouvelle instance d'état de session. Au même heure, si l'utilisateur ouvre une autre application dans le même DNS domaine, l’utilisateur ne perdra pas son état de session après l’abandon La méthode est appelée depuis une application. 

Parfois, vous ne voudrez peut-être pas réutiliser l'ID de session. Si vous le faites et si vous comprenez les conséquences de ne pas réutiliser l'ID de session, utilisez l'exemple de code suivant pour abandonner une session et effacer le cookie d'identification de session:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Cet exemple de code efface l'état de la session du serveur et définit le cookie d'état de session à null. La valeur null efface effectivement le cookie du navigateur.

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

4
MTs

Vous ne devriez jamais stocker le mot de passe en tant que cookie. Pour supprimer un cookie, il vous suffit de le modifier et de l’expirer. Vous ne pouvez pas vraiment le supprimer, c'est-à-dire le supprimer du disque de l'utilisateur. 

Voici un échantillon:

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

Utiliser le titre de la question du PO comme suppression de tous les cookies - "Supprimer les cookies du site Web"

Je suis tombé sur du code de Dave Domagala sur le Web quelque part. J'ai édité Dave pour autoriser également les cookies de Google Analytics - qui ont parcouru tous les cookies présents sur le site Web et les ont tous supprimés. (D'un point de vue développeur - mettre à jour un nouveau code sur un site existant, c'est une touche agréable pour éviter les problèmes avec les utilisateurs revisitant le site).

J'utilise le code ci-dessous en même temps que la lecture des cookies, en conservant les données requises - puis en réinitialisant les cookies après tout avoir nettoyé avec la boucle ci-dessous.

Le 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.
}

Ajout: Si vous utilisez Google Analytics

La boucle/suppression ci-dessus supprime TOUS les cookies du site. Par conséquent, si vous utilisez Google Analytics, il serait probablement utile de conserver le cookie __utmz, car celui-ci indique l'origine du visiteur, le moteur de recherche utilisé, les lien a été cliqué sur, quel mot-clé a été utilisé et où ils étaient dans le monde lorsque votre site Web a été consulté.

Donc, pour le garder, encapsulez une simple déclaration if une fois que le nom du cookie est connu:

... 
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);    
}
2

Bien que ce soit un vieux fil, je pensais que si quelqu'un cherchait toujours une solution dans le futur. 

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

Thats ce qui a fait le tour pour moi. 

1
Ahsan

Nous sommes en 2018, donc dans ASP.NET Core, il existe une fonction intégrée simple. Pour supprimer un cookie, essayez ce 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