Cookie总是过期的

我正在设置一个cookie:

HttpCookie cookie = new HttpCookie("simpleorder"); cookie.Expires = DateTime.Now.AddYears(1); cookie["order"] = carModel.ToString(); cookie["price"] = price.ToString(); Response.Cookies.Add(cookie); 

但是当我几秒钟检查它时它已经过期,并且到期日期设置为{01-01-0001 00:00:00}。 我尝试通过检索代码

  HttpCookie cookie = Request.Cookies["simpleorder"]; if (cookie != null && cookie.Expires > DateTime.Now)... 

我不清楚任何地方的cookie,所以我不知道它为什么会过期?

这是常见的误解。 请求cookie集合表示请求cookie标头中包含的cookie。 此类cookie不包含有关何时到期的任何信息。 严格来说,.NET应该使用两种不同的类型(RequestCookie和ResponseCookie),而是选择在两种情况下使用相同的类型。

Expires值仅在向响应添加cookie时才有意义。

起初我还对请求cookie没有Expires值感到失望,但在使用Fiddler2调试之后,我知道http协议不包含任何请求cookie的Expires值。 .NET Framework无法为请求cookie公开Expires值。

如果您在应用程序和浏览器之间使用Fiddler,则可以看到响应cookie正确地发送到具有所有属性的浏览器。 但是,http标头中的请求cookie没有expires值,它只公开cookie名称和值。 浏览器需要发送此请求标头,如http标准中所指定。 之所以可以最小化大小和Web服务器,则不需要检查除值之外的任何内容。

因此,您不需要检查Web请求上的expires值,因为它是您在某些早期Web响应中设置的值。 如果您收到cookie,则表示cookie尚未过期。 设置expires值后,浏览器将处理到期日期。 如果要更改过期,只需在响应上设置新值即可。