7

我正在尝试删除一个 cookie,但它并没有被删除。这是我尝试使用的代码。

if (Request.Cookies["dcart"] != null)
{
    Response.Write(Request.Cookies["dcart"].Expires);
    // Response 1/1/0001 12:00:00 AM

    Response.Write(Request.Cookies["dcart"].Value);
    // Response 229884

    HttpCookie myCookie = new HttpCookie("dcart");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    myCookie.Value = "";
    Response.Cookies.Add(myCookie);
}

Response.Write(Request.Cookies["dcart"].Expires);
// Response 1/1/0001 12:00:00 AM
Response.Write(Request.Cookies["dcart"].Value);
// Response 229884

当我再次检索 cookie 时,没有任何变化。我检查 w/ FireFox 和 Chrome 相同的行为。有趣的一点是,到期日期在浏览器上正确显示,但在代码上。

我尝试了以下并没有工作。

  • 将到期日设置为(明天)并再次将其设置为昨天。
  • 重启浏览器(发生不同的浏览器和人)
  • 设置值
  • 使用 HttpContext.Current.Request.Cookies["dcart"]....
  • Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-10);

PS。该代码不会直接在您的机器上运行,因为您没有 cookie。

4

3 回答 3

5

解决了

问题是路径。我请求的cookie位于“/store”路径下,而我将路径信息响应为“/”。

if (Request.Cookies["dcart"] != null)
{
   HttpCookie myCookie = new HttpCookie("dcart");
   myCookie.Expires = DateTime.Now.AddDays(-1d);
   myCookie.Path = "/store";
   Response.Cookies.Add(myCookie);
}

当我添加路径信息时,它被删除了。

注意:我使用 Firebug 来跟踪 cookie 路径。

于 2012-12-07T00:21:41.823 回答
0

饼干比看起来更棘手。阅读此文章以获得有关如何使用 cookie 的清晰说明:

关于 Cookie 的保养和处理

要删除 cookie,根据链接文章,您只需将过期时间设置为过去的任何时间,但不要使用 DateTime.MinValue 因为某些浏览器无法正确处理该日期:

如果你想删除客户端机器上的 cookie,不要使用明显的 Response.Cookies.Remove("MyCookie") ,它只是告诉 cookie 不要覆盖客户端的 cookie(更详细的解释见下文),设置cookie 的 Expires 属性为当前时间之前的任何时间。这将告诉客户端用过期的 cookie 覆盖当前的 cookie,并且客户端永远不会将其发送回服务器。

同样,诱惑是使用 DateTime.MinValue (01-Jan-0001 00:00:00) 删除 cookie;同样,这将是一个错误。这一次,Netscape 7 将按预期工作,但 Internet Explorer 6 认为这是一个例外情况。如果 Internet Explorer 收到一个它认为是“空白”到期日期的 cookie,它将保留该 cookie,直到浏览器关闭然后到期。

使用 DateTime.Now.AddYears(-30) 的到期日期来删除 cookie 的最安全(也是最对称)的方法。

即正确的方法是

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30);
于 2012-12-06T23:42:01.157 回答
0

此链接将为您提供一些答案:

https://msdn.microsoft.com/en-us/library/ms178195.aspx

就我而言,只是在本地主机中工作,但是,当我部署到服务器时,问题仍然存在......

HttpCookie中,您可以尝试设置 Expire 参数DateTime.Now.AddDays(-1d),(将 Expire date 设置为昨天)并设置属性Secure = false

在此之后,为我工作。

于 2017-02-01T22:14:43.580 回答