处理ASP.NET MVC5中cookie删除不掉问题一例

处理ASP.NET MVC5中cookie删除不掉问题一例

2322发表于2017-12-19

今天为自己的一个项目增加了一个自动登录的功能,大概原理是使用cookie(基于安全考虑当然要加密了 ^_^)。有一个地方要遇到一个问题,当用户退出的时候删除cookie时没有删掉。

本项目采用的ASP.NET mvc5。

原来使用删除cookie方法如下(无效):

HttpContext.Current.Response.Cookies.Remove("autoPwd");
HttpContext.Current.Response.Cookies.Remove("autoUserName");
换了一种方式依然无效:

if (HttpContext.Current.Request.Cookies.AllKeys.Contains("autoUserName"))
{
	HttpContext.Current.Request.Cookies["autoUserName"].Expires = DateTime.Now.AddDays(-3);
}
   
if (HttpContext.Current.Request.Cookies.AllKeys.Contains("autoPwd"))
{
	HttpContext.Current.Request.Cookies["autoPwd"].Expires = DateTime.Now.AddDays(-3);
}

===========

正解:

if (HttpContext.Current.Request.Cookies.AllKeys.Contains("autoUserName"))
{
	var cookie = HttpContext.Current.Request.Cookies["autoUserName"];
	cookie.Expires = DateTime.Now.AddDays(-3);
	HttpContext.Current.Response.Cookies.Add(cookie);
}
   
if (HttpContext.Current.Request.Cookies.AllKeys.Contains("autoPwd"))
{
	var cookie = HttpContext.Current.Request.Cookies["autoPwd"];
	cookie.Expires = DateTime.Now.AddDays(-3);
	HttpContext.Current.Response.Cookies.Add(cookie);
}
原来删除cookie是要设置其过期,也就是把过期时间设置为小于当前时间就行,但是要通过Response把cookie实例Add到响应集合中去,不然不行了。这个时候你会不会恍然大悟,想到Http是无状态的,必须要通过Request和Response来传递信息!

小编蓝狐