首先要有一些背景知识。这是用于在同一域内的不同站点上进行验证的令牌。我进入中央登录页面。除注销外,此页面工作正常。我要删除的所有其他Cookie都会被JQuery Cookie $.removeCookie('cookieName')
删除。而且我知道,由于有安全标志,我无法从JavaScript中删除它。
因此,我尝试从控制器方法中将其删除。我通过JavaScript的ajax调用此方法。
$.ajax({ur:'/Login/ExpireToken'})
我可以在Chrome控制台的“网络”标签中看到它可以正常工作。
public void ExpireToken()
{
Response.Cookies.Remove("crowd.token_key");
}
但是,我不知道为什么,它会创建一个新的cookie,该cookie具有相同的名称,空值,登录页面的整个域且未设置任何标志。
所以我测试了后端是否可以找到我想要的cookie。
public string ExpireToken()
{
return Response.Cookies["crowd.token_key"].Value;
}
它返回正确的值,并且不会创建新的/错误的值。
此后,我尝试将过期字段设置为过去或现在的一天。我不知道为什么这应该起作用,因为该cookie的到期日期已经过去。
public void ExpireToken()
{
Response.Cookies["crowd.token_key"].Expires = DateTime.Now.AddDays(-1d);
}
然后猜怎么着,它不起作用。它实际上什么也没做。
其他无效的方法
if (Request.Cookies["crowd.token_key"] != null)
{
var c = new HttpCookie("crowd.token_key");
c.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(c);
}
答案 0 :(得分:0)
与per the doc一样,您正在按自己的意愿做事,即将到期日期设置为昨天。引用:
该技术是创建一个与cookie名称相同的新cookie。 cookie,但将cookie的到期日期设置为一个日期 比今天早。当浏览器检查Cookie的有效期时, 浏览器将丢弃现在过时的cookie
我会设置一个断点并进行调试以检查cookie名称,如果一切正常,则可能是Web浏览器行为异常。
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);
Response.Cookies.Add(aCookie);
}