我正在使用以下代码设置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中并检查它?我的理解是否正确?
谢谢尚卡尔
这里的问题并不在于ASP.NET,而在于浏览器在http请求中提供的信息量.无论您在服务器端使用何种平台,都无法获得到期日期.
正如您在问题中总结的那样,HttpRequest对象提供的HttpCookie对象的Expires属性始终设置为1/1/0001 12:00 AM.这是因为当发送请求时,浏览器不会将此到期信息以及域和路径等属性传递给服务器.发送的唯一cookie信息是名称和值.因此,请求中的cookie将具有这些"缺失"字段的默认值,因为它们在服务器端是未知的.
我猜这背后的原因是,cookie的expiry,domain和path属性仅供浏览器在决定是否应该在请求中传递cookie时使用,并且服务器只对名称和值感兴趣.
你周围的工作建议重复到期时间,因为cookie的另一个值是获得你正在寻找的行为的一种方式.