如何删除此Cookie? ASP.NET MVC

时间:2018-09-13 07:29:25

标签: c# jquery asp.net cookies

我尝试删除此Cookie: enter image description here

首先要有一些背景知识。这是用于在同一域内的不同站点上进行验证的令牌。我进入中央登录页面。除注销外,此页面工作正常。我要删除的所有其他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);
}

1 个答案:

答案 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);
}