我正在使用以下代码设置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
Run Code Online (Sandbox Code Playgroud)
当我在另一页读取cookie超时时,我得到1/1/0001 12:00 AM.如果有人可以帮我解决问题,我会很感激.我正在使用ASP.NET 3.5
好.看完Gulzar的链接后,似乎我无法检查cookie.Expires上的HttpRequest根本没有?因为链接似乎暗示cookie.Expires总是设置为DateTime.MinValue,因为服务器永远不知道客户端计算机上的实际时间?所以这意味着我必须自己将时间存储在cookie中并检查它?我的理解是否正确?
谢谢尚卡尔
And*_*ose 62
这里的问题并不在于ASP.NET,而在于浏览器在http请求中提供的信息量.无论您在服务器端使用何种平台,都无法获得到期日期.
正如您在问题中总结的那样,HttpRequest对象提供的HttpCookie对象的Expires属性始终设置为1/1/0001 12:00 AM.这是因为当发送请求时,浏览器不会将此到期信息以及域和路径等属性传递给服务器.发送的唯一cookie信息是名称和值.因此,请求中的cookie将具有这些"缺失"字段的默认值,因为它们在服务器端是未知的.
我猜这背后的原因是,cookie的expiry,domain和path属性仅供浏览器在决定是否应该在请求中传递cookie时使用,并且服务器只对名称和值感兴趣.
你周围的工作建议重复到期时间,因为cookie的另一个值是获得你正在寻找的行为的一种方式.
起初我也很失望,为什么 Request cookie 没有实际的 Expires 值。使用 Fiddler2 调试 http 后。我知道 .NET 没有错,相反,http 协议是请求 cookie 行为如此的原因。
如果您在应用程序和浏览器之间使用 Fiddler。您可以看到 Response cookie 正确发送到浏览器,其中包含所有域、路径、过期时间、安全和 httponly。但是,http cookie 标头中的下一个请求 cookie 没有 expires 值,它只有 cookie 名称和值。浏览器负责发送这个请求头,我相信这是因为 http 协议。原因是为了最小化大小,Web 服务器不需要检查它,因为它们实际上设置了所有值。他们应该注意到。
因此,您无需检查 Web 请求上的 expires 值,因为您已经知道日期。只是,如果您收到 cookie,则表示 cookie 尚未过期。一旦你设置了过期时间,浏览器就会处理过期时间。如果您想更改过期时间,只需在响应中设置新值。
呼叫MeLaNN
链接中讨论的版本问题没有帮助。基本上 ASP.NET cookie 很糟糕。我必须自己将过期日期时间存储在 cookie 中,并在每个请求中检查它。
| 归档时间: |
|
| 查看次数: |
31099 次 |
| 最近记录: |