【问题标题】:Delete cookie issue in C#在 C# 中删除 cookie 问题
【发布时间】:2017-02-02 06:14:43
【问题描述】:

我正在尝试删除一个 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。

【问题讨论】:

  • 使用 Fiddler(或任何其他 HTTP 调试器)并查看 cookie 是否实际发送出去。 IE。在发送之前可能会调用从响应中删除所有 cookie...
  • @DaveZych Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-10);没用。

标签: c# asp.net cookies


【解决方案1】:

解决了

问题是路径。我请求的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 路径。

【讨论】:

  • 在 chrome 中,cookie 路径可以很容易地在 chrome://settings/cookies 下找到
【解决方案2】:

Cookie 比看起来更复杂。阅读这篇文章以获得关于如何使用 cookie 的清晰描述:

On The Care and Handling of Cookies

要删除 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) 的到期日期。

即正确的方法是

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30);

【讨论】:

    【解决方案3】:

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

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

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

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

    之后,为我工作。

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 2011-12-24
      • 2011-03-28
      • 2011-08-05
      • 2011-10-31
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      相关资源
      最近更新 更多