我正在设置一个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,所以我不知道为什么会过期?
答案 0 :(得分:19)
这是常见的误解。请求cookie集合表示请求cookie标头中包含的cookie。此类cookie不包含任何有关何时到期的信息。严格来说,.NET应该使用两种不同的类型(RequestCookie和ResponseCookie),而是选择在两种情况下使用相同的类型。
Expires值仅在向响应中添加Cookie时才有意义。
答案 1 :(得分:2)
起初我还对请求cookie没有Expires
值感到失望,但在使用Fiddler2进行调试后,我知道http协议不包含请求cookie的任何Expires
值。 .NET Framework无法为请求cookie公开Expires
值。
如果您在应用和浏览器之间使用Fiddler,则可以看到响应cookie已正确发送到具有所有属性的浏览器。但是,http标头中的请求cookie没有expires值,它只公开cookie名称和值。浏览器需要发送此请求标头,如http标准中所指定。之所以可以最小化大小和Web服务器,则不需要检查除值之外的任何内容。
因此,您无需检查Web请求上的expires
值,因为它是您在某些早期Web响应中设置的值。如果您收到cookie,则表示cookie尚未过期。设置expires
值后,浏览器将处理到期日期。如果要更改过期,只需在响应中设置新值。