Dans 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 qui doit être ajouté pour supprimer tous les cookies de mon site Web?
Session.Abandon
effacera le cookie de session ASP.NET, mais pas les cookies que vous avez définis manuellement, comme userID ici. EtCookies["whatever"]
n'est jamais nul; le framework créera un cookie si vous en demandez un inexistant.Cookies["whatever"]
renvoie en fait null lorsque le cookie n'existe pas! Je sais que c'est un vieux commentaire mais je ne veux pas que d'autres lecteurs soient induits en erreur par ce commentaire.Expires
ne PAS définirDateTime.MinValue
ce paramètre car cela donnera au cookie une expiration de session, ce qui signifie qu'il attend que le navigateur / l'onglet (dépendant du navigateur) soit fermé avant de supprimer le cookie.Non, les cookies ne peuvent être nettoyés qu'en définissant 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()
:Session
collection sont supprimées.Session_End
l'événement ne se produit pas.Si vous utilisez cette méthode lors de la déconnexion, vous devez également utiliser la
Session.Abandon
méthode toSession_End
event:la source
if
ligne ne fonctionne pas réellement. Lorsque vous demandez un cookie avecCookies["whatever"]
le framework va créer un cookie s'il n'existe pas.Request
object.Response
objet. Intéressant :)Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
. Ici, le serveur demandera au navigateur de supprimer le cookie. Le navigateur le supprimera s'il existe.Voici 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(); } }
la source
Malheureusement, pour moi, définir "Expire" 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", ""));
où
"ASP.NET_SessionId"
est le nom du cookie. Cela ne supprime pas vraiment le cookie, mais le remplace par un cookie vide, ce qui était assez proche pour moi.la source
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.
http://support.microsoft.com/kb/899918
la source
Nous sommes en 2018 maintenant, 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();
la source
Vous ne devez jamais stocker le mot de passe sous forme de cookie. Pour supprimer un cookie, il vous suffit simplement de le modifier et de le faire expirer. Vous ne pouvez pas vraiment le supprimer, c'est-à-dire le supprimer du disque de l'utilisateur.
Voici un exemple:
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 }
la source
Prendre le titre de la question du PO comme suppression de tous les cookies - "Supprimer les cookies sur le site Web"
Je suis tombé quelque part sur le code de Dave Domagala sur le Web. J'ai modifié Dave's pour autoriser également les cookies Google Analytics - qui parcouraient tous les cookies trouvés sur le site Web et les supprimaient tous. (Du point de vue du développeur - mettre à jour un nouveau code dans un site existant est une bonne idée pour éviter les problèmes avec les utilisateurs revisitant le site)
J'utilise le code ci-dessous en tandem en lisant d'abord les cookies, en conservant toutes les données requises - puis en réinitialisant les cookies après avoir tout 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 supprimera TOUS les cookies du site, donc si vous utilisez Google Analytics - il serait probablement utile de conserver le cookie __utmz car celui-ci garde une trace de l'origine du visiteur, du moteur de recherche utilisé, de quoi le lien a été cliqué, quel mot-clé a été utilisé et où ils se trouvaient dans le monde lorsque votre site Web a été consulté.
Donc, pour le garder, enveloppez une simple instruction 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); }
la source
Bien que ce soit un vieux fil, je me suis dit que si quelqu'un cherchait toujours une solution à l'avenir.
HttpCookie mycookie = new HttpCookie("aa"); mycookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(mycookie1);
C'est ce qui a fait l'affaire pour moi.
la source
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)
la source
Vous devez définir la date d'expiration pour supprimer les cookies
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
Cela ne lèvera pas d'exception si le cookie n'existe pas.
la source