55 votes

Comment effacer les cookies en utilisant asp.net mvc 3 et c #?

Ok, alors je pense vraiment que je le fais bien, mais les cookies ne sont pas effacés.

  Session.Clear();
 HttpCookie c = Request.Cookies["MyCookie"];
 if (c != null)
 {
     c = new HttpCookie("MyCookie");
     c["AT"] = null;
     c.Expires = DateTime.Now.AddDays(-1);
     Request.Cookies.Add(c);
 }

 return RedirectToAction("Index", "Home");
 

Lorsque la redirection se produit, il retrouve le cookie et continue comme si je ne m'étais jamais déconnecté. Des pensées?

105voto

Metro Smurf Points 14234

Tu es proche. Vous devrez utiliser l'objet Response pour écrire dans le navigateur:

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

Plus d'informations sur MSDN, Comment: supprimer un cookie .

9voto

KeithS Points 36130

Les cookies sont stockés sur le client, pas sur le serveur, donc Session.Clear ne les affectera pas. En outre, Request.Cookies est renseigné par IIS et attribué à votre page avec chaque demande de page. l'ajout / la suppression d'un cookie de cette collection ne fait rien.

Essayez d'effectuer une action similaire contre Response.Cookies. Cela devrait amener votre client à remplacer l'ancien cookie par le nouveau, ce qui l'expirera.

4voto

Alex Points 3871

Je l'ai fait et cela a fonctionné pour effacer (ne pas supprimer) un cookie de session:

 HttpContext.Response.Cookies.Set(new HttpCookie("cookie_name"){Value = string.Empty});
 

Sur la base de la réponse de Metro, j'ai créé cette méthode d'extension pour rendre le code réutilisable dans n'importe quel contrôleur.

 /// <summary>
/// Deletes a cookie with specified name
/// </summary>
/// <param name="controller">extends the controller</param>
/// <param name="cookieName">cookie name</param>
public static void DeleteCookie(this Controller controller, string cookieName)
{
    if (controller.HttpContext.Request.Cookies[cookieName] == null)
            return; //cookie doesn't exist

    var c = new HttpCookie(cookieName)
                {
                    Expires = DateTime.Now.AddDays(-1)
                };
    controller.HttpContext.Response.Cookies.Add(c);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X