En mi sitio web, cuando el usuario hace clic en el botón "Cerrar sesión", la página Logout.aspx se carga con el código Session.Clear()
.
En ASP.NET/C#, ¿esto borra todas las cookies? ¿O hay algún otro código que deba agregarse para eliminar todas las cookies de mi sitio web?
Session.Abandon
borrará la cookie de sesión ASP.NET, pero no las cookies que establezca manualmente, como el ID de usuario aquí. YCookies["whatever"]
nunca es nulo; el marco creará una cookie si solicita una que no existe.Cookies["whatever"]
devuelve nulo cuando la cookie no existe. Sé que este es un comentario antiguo, pero no quiero que otros lectores se engañen con este comentario.Expires
NO esté configurado,DateTime.MinValue
ya que esto le dará a la cookie un vencimiento de sesión, lo que significa que espera hasta que el navegador / pestaña (dependiente del navegador) se cierre antes de eliminar la cookie.No, las cookies solo se pueden limpiar configurando la fecha de vencimiento de cada una de ellas.
if (Request.Cookies["UserSettings"] != null) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); }
En el momento de
Session.Clear()
:Session
Se eliminan todos los pares clave-valor de la colección.Session_End
el evento no sucede.Si usa este método durante el cierre de sesión, también debe usar el
Session.Abandon
método paraSession_End
eventos:fuente
if
línea no funciona. Cuando solicite una cookie conCookies["whatever"]
el marco, se creará una cookie si no existe.Request
object.Response
objeto. Interesante :)Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
. Aquí el servidor solicitará al navegador que elimine las cookies. El navegador lo eliminará si existe.Esto es lo que uso:
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(); } }
fuente
Desafortunadamente, para mí, configurar "Caduca" no siempre funcionó. La galleta no se vio afectada.
Este código funcionó para mí:
HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
donde
"ASP.NET_SessionId"
es el nombre de la cookie. Esto realmente no elimina la cookie, pero la reemplaza con una cookie en blanco, que estaba lo suficientemente cerca para mí.fuente
Solo quiero señalar que la cookie de ID de sesión no se elimina cuando se usa Session.Abandon como dijeron otros.
http://support.microsoft.com/kb/899918
fuente
Es 2018 ahora, por lo que en ASP.NET Core, hay una función integrada directa. Para eliminar una cookie, pruebe este código:
if(Request.Cookies["aa"] != null) { Response.Cookies.Delete("aa"); } return View();
fuente
Nunca debe almacenar la contraseña como una cookie. Para eliminar una cookie, solo necesita modificarla y caducarla. Realmente no puede eliminarlo, es decir, eliminarlo del disco del usuario.
He aquí una muestra:
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 }
fuente
Tomar el título de la pregunta del OP como eliminar todas las cookies: "Eliminar cookies en el sitio web"
Encontré código de Dave Domagala en la web en algún lugar. Edité Dave's para permitir también las cookies de Google Analytics, que recorrieron todas las cookies que se encuentran en el sitio web y las eliminaron todas. (Desde el punto de vista del desarrollador, actualizar el código nuevo en un sitio existente es un buen toque para evitar problemas con los usuarios que vuelven a visitar el sitio).
Utilizo el siguiente código junto con leer las cookies primero, manteniendo los datos requeridos y luego restableciendo las cookies después de limpiar todo con el siguiente ciclo.
El código:
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. }
Además: si usa Google Analytics
El bucle / eliminación anterior eliminará TODAS las cookies del sitio, por lo que si usa Google Analytics, probablemente sería útil mantener la cookie __utmz ya que esta realiza un seguimiento de dónde vino el visitante, qué motor de búsqueda se usó, qué se hizo clic en el enlace, qué palabra clave se utilizó y en qué lugar del mundo se accedió a su sitio web.
Entonces, para mantenerlo, envuelva una declaración if simple una vez que se conozca el nombre de la cookie:
... 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); }
fuente
Aunque este es un hilo antiguo, pensé si alguien todavía está buscando una solución en el futuro.
HttpCookie mycookie = new HttpCookie("aa"); mycookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(mycookie1);
Eso es lo que hizo el truco para mí.
fuente
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)
fuente
Tienes que configurar la fecha de caducidad para eliminar las cookies
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
Esto no generará una excepción si la cookie no existe.
fuente