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?
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.
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()
:
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
:
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();
}
}
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", ""));
où "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.
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.
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
}
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);
}
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.
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();
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)