¿Cómo borras las cookies usando asp.net mvc 3 yc #?

Ok, entonces realmente creo que estoy haciendo esto bien, pero las cookies no se están borrando.

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"); 

Cuando ocurre la redirección, encuentra la cookie nuevamente y continúa como si nunca me hubiera desconectado. ¿Alguna idea?

Estás cerca. Tendrá que usar el objeto Response para volver a escribir en el navegador:

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

Más información en MSDN, Cómo eliminar una cookie .

Las cookies se almacenan en el cliente, no en el servidor, por lo que Session.Clear no las afectará. Además, Request.Cookies se rellena con IIS y se le asigna a su página con cada solicitud de una página; agregar / eliminar una cookie de esa colección no hace nada.

Intente realizar una acción similar contra Response.Cookies. Eso debería hacer que su cliente sobrescriba la cookie anterior con la nueva, haciendo que caduque.

Hice esto y funcionó para borrar (no borrar) una cookie de sesión:

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

Basado en la respuesta de Metro, creé este método de extensión para hacer que el código sea reutilizable en cualquier controlador.

 ///  /// Deletes a cookie with specified name ///  /// extends the controller /// cookie name 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); }