你如何使用asp.net mvc 3和c#清除cookie?

好的,所以我真的认为我这样做是正确的,但cookies没有被清除。

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

当redirect发生时,它再次findcookie并继续前进,就好像我从未注销过一样。 有什么想法吗?

你很近 您需要使用Response对象回写到浏览器:

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

有关MSDN更多信息, 如何:删除Cookie 。

Cookies存储在客户端,而不是服务器上,因此Session.Clear不会影响它们。 此外,Request.Cookies由IIS填充并提供给您的页面与每个页面的请求; 添加/从该集合中删除一个cookie什么都不做。

尝试对Response.Cookies执行类似的操作。 这应该导致你的客户覆盖旧的cookie与新的,导致它过期。

我这样做,它清除(不删除)会话cookie的工作:

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

基于Metro的响应,我创build了这个扩展方法,使代码可以在任何控制器中重用。

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