Dans mon site web lorsque l'utilisateur clique sur le bouton de déconnexion. Fermeture de la session.aspx chargement de la page avec le code Session.Clear()
; dans ASP.NET/C# ce faire effacer tous les cookies? Ou est-il un autre code à ajouter, de supprimer tous les cookies de mon site web?
Réponses
Trop de publicités?Non, les Cookies peuvent être nettoyés uniquement par le réglage de 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 l' Session.Clear()
:
- Toutes les paires clé-valeur de
Session
collection sont supprimés.Session_End
événement n'est pas arriver.
Si vous utilisez cette méthode lors de la déconnexion, vous devez également utiliser l' Session.Abandon
méthode de
Session_End
événement:
- Cookie avec un IDENTIFIANT de Session (si votre application utilise des cookies de session id store, qui est par défaut) est supprimé
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 cookieName = cookie.Name;
var expiredCookie = new HttpCookie(cookieName) {Expires = DateTime.Now.AddDays(-1)};
HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
}
}
// clear cookies server side
HttpContext.Current.Request.Cookies.Clear();
}
}
Malheureusement, pour moi, le paramètre "date d'Expiration" ne fonctionne pas toujours. Le cookie n'a pas été affectée.
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. Ce n'est pas vraiment supprimer le cookie, mais le remplace par un espace vide cookie, ce qui était assez proche pour moi.
Je veux juste souligner que le cookie de Session n'est pas supprimé lors de l'utilisation de Session.Abandonner comme les autres ont dit.
Lorsque vous abandonner une session, le cookie de session n'est pas supprimé le navigateur de l'utilisateur. Par conséquent, dès que la session a été abandonnée, les nouvelles demandes de la même application va utiliser le même ID de session, mais qui aura une nouvelle session de l'état de l'instance. Dans le même temps, si l'utilisateur ouvre une autre application dans le même DNS domaine, l'utilisateur ne perdent pas leur état de session après l'Abandon la méthode est appelée à partir d'une application.
Parfois, vous ne pouvez pas réutiliser le code de session. Si vous le faites et si comprendre les ramifications de ne pas réutiliser l'ID de session, utiliser l'exemple de code suivant pour abandonner une session et pour effacer la cookie de session:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Cet exemple de code efface l'état de session à partir du serveur et le cookie d'état de session null. La valeur null supprime efficacement le cookie du navigateur.