我对testbed页面进行了一些更改,所以我可以在这里更清楚地提问.
该页面有三个按钮:Set; 明确; 得到.
Set有这个代码:
PreferredCookie = new HttpCookie("PreferredCookie"); PreferredCookie.Value = "Chocolate Chip"; DateTime exp = DateTime.Now.AddDays(1.0d); PreferredCookie.Expires = exp; Response.Cookies.Set(PreferredCookie);
清楚有这个:
HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"]; if (PreferredCookie != null) { PreferredCookie.Value = ""; PreferredCookie.Expires = DateTime.Now; Response.Cookies.Set(PreferredCookie); }
得到这个,输出到asp:Literal:
HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"]; if (PreferredCookie != null) { CookieLiteral.Text = "Value = " + PreferredCookie.Value + "
"; CookieLiteral.Text += "Expires = " + PreferredCookie.Expires.ToString("MM/dd/yyyy HH:mm:ss"); } else { CookieLiteral.Text = "No Cookie?
"; }
如果我启动页面并单击"清除",然后使用"获取"进行后续操作,我会看到:
没有Cookie?
如果我然后单击Set,然后Get,我看到:
价值=巧克力片
过期= 01/01/0001 00:00:00
这个日期似乎被视为永不过期.如果我使用Firefox访问该页面,我会得到相同的结果.
简答 - 您无法读取cookie的到期日期和时间.
稍微长一点的答案 -这不是ASP.NET中的会话问题.这是您可以从ASP.NET中的cookie服务器端读取的问题.根据MSDN:
浏览器负责管理cookie,cookie的过期时间和日期有助于浏览器管理其cookie存储.因此,虽然您可以读取cookie的名称和值,但您无法读取cookie的到期日期和时间.当浏览器向服务器发送cookie信息时,浏览器不包含过期信息.(cookie的Expires属性始终返回零日期时间值.)
在将cookie发送到浏览器之前,您可以读取已在HttpResponse对象中设置的cookie的Expires属性. 但是,您无法在HttpRequest对象中返回到期日期.
所以基本上,cookie到期日期设置正确.这可以通过检查浏览器中的cookie来验证.不幸的是,像Get函数一样读取这个cookie 将返回1/1/0001.
如果你真的想要过期,那么你必须将它存储在cookie本身中:
组
DateTime exp = DateTime.Now.AddDays(1); HttpCookie PreferredCookie = new HttpCookie("PreferredCookie"); PreferredCookie.Values.Add("cookieType", "Zref"); PreferredCookie.Values.Add("exp", exp.ToString()); PreferredCookie.Expires = exp; Response.Cookies.Set(PreferredCookie);
得到
HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"]; if (PreferredCookie != null) { CookieLiteral.Text = "Value = " + PreferredCookie["cookieType"] + "<br>"; CookieLiteral.Text += "Expires = " + PreferredCookie["exp"]; } else { CookieLiteral.Text = "No Cookie"; }