ASP.NET Cookie过期时间始终为1/1/0001 12:00 AM

我使用下面的代码设置cookie过期:


// remove existing cookies.
request.Cookies.Clear();
response.Cookies.Clear();

// ... serialize and encrypt my data ...

// now set the cookie.
HttpCookie cookie = new HttpCookie(AuthCookieName, encrypted);
cookie.Expires = DateTime.Now.Add(TimeSpan.FromHours(CookieTimeOutHours));
cookie.HttpOnly = true;
response.Cookies.Add(cookie);

// redirect to different page

当我读取其他页面中的cookie超时时,我得到1/1/0001 12:00 AM。 如果有人能帮我弄清楚这个问题,我会很感激。 我正在使用ASP.NET 3.5

好。 在阅读了Gulzar的链接之后,看起来我根本无法检查cookie.Expires对HttpRequest的依赖? 因为链接似乎暗示cookie.Expires总是设置为DateTime.MinValue,因为服务器永远不会知道客户端计算机上的实际时间? 所以这意味着我必须自己将时间存储在cookie中并检查它? 我的理解是否正确?

感谢Shankar


你使用的是哪个版本的asp.net? 这是在asp.net论坛中讨论的。


这里的问题并不在于ASP.NET,而是浏览器在http请求中提供的大量信息。 无论您在服务器端使用的平台如何,失效日期都是无法实现的。

正如你在自己的问题中总结的那样,由HttpRequest对象提供的HttpCookie对象的Expires属性始终设置为1/1/0001 12:00 AM。 这是因为这个到期信息以及域和路径等属性在发送请求时不会被浏览器传递给服务器。 唯一发送的cookie信息是名称和值。 因此,请求中的Cookie将具有这些'缺少'字段的默认值,因为它们在服务器端是未知的。

我猜想这背后的原因是,cookie的到期时间,域名和路径属性只能用于浏览器,当它决定是否应该在请求中传递cookie时,以及服务器只对名称和值有兴趣。

您周围的工作建议复制到期时间,因为cookie的另一个值是获取您正在查找的行为的一种方式。


起初我也失望了为什么Request cookie没有实际的Expires值。 通过使用Fiddler2调试http后。 我知道.NET并没有错,相反,http协议是为什么请求cookie的行为如此。

如果您在应用程序和浏览器之间使用Fiddler。 您可以看到响应cookie正确发送到所有域,路径,过期,安全和httponly的浏览器。 然而,在http cookie header中的下一个请求cookie没有expires值,它只有cookie名称和值。 浏览器负责发送这个请求头,我相信那是因为http协议。 之所以会这样,是因为为了最小化大小和Web服务器,并不需要检查它,因为它们实际上设置了所有的值。 他们应该注意。

所以你不需要检查Web请求的过期值,因为你已经知道日期。 只是,如果您收到返回的cookie,意味着cookie尚未过期。 一旦你设置到期,浏览器将处理到期。 如果您想更改过期时间,只需在响应中设置新值即可。

CallMeLaNN

链接地址: http://www.djcxy.com/p/57805.html

上一篇: ASP.NET cookie expiration time is always 1/1/0001 12:00 AM

下一篇: Get Header from PHP cURL response