我有以下C#代码,用于在cookie中记录用户的URL。如果cookie已存在,则会将新值附加到由管道字符分隔的现有值。我的ASPX页面查找此cookie,根据管道字符切换值并将它们绑定到网格。到现在为止还挺好。但是当我在浏览器中访问Internet选项并清除我的cookie,临时文件等并刷新页面时,页面仍然可以从cookie中读取值。看来cookie根本没有删除。无论如何,它都会被持久化。是什么赋予了?如果用户从浏览器中清除cookie,则ASPX中的网格控件应为空。该页面没有使用缓存或任何东西。
HttpCookie recentlyViewedCookie = Request.Cookies["RecentlyViewedCookie"];
if (recentlyViewedCookie != null)
{
string value = recentlyViewedCookie.Value;
value = string.Format("{0}|{1}*{2}", value, DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
recentlyViewedCookie.Value = value;
Response.Cookies.Add(recentlyViewedCookie);
}
else
{
recentlyViewedCookie = new HttpCookie("RecentlyViewedCookie");
recentlyViewedCookie.Value = string.Format("{0}*{1}", DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
recentlyViewedCookie.Expires = DateTime.Now.AddMonths(1);
Response.Cookies.Add(recentlyViewedCookie);
}
感谢您的回答。
答案 0 :(得分:2)
问题在于这段代码:
if (recentlyViewedCookie != null)
{
string value = recentlyViewedCookie.Value;
value = string.Format("{0}|{1}*{2}", value, DateTime.Now.ToString("MM/dd/yyyy"), Request.Url.ToString());
recentlyViewedCookie.Value = value;
Response.Cookies.Add(recentlyViewedCookie);
}
您没有设置Cookie的到期日期。如果cookie没有到期日期,它就是一个“会话cookie”并保存在内存中,直到浏览器关闭 - 它永远不会写入磁盘 - 因此从磁盘中删除所有cookie不会影响它。
您可能认为初始cookie创建的到期日期会持续存在,但事实并非如此。服务器无权访问原始cookie,也不知道过期设置的内容。所以它只是写了一个没有任何过期日期的set-cookie标题,将cookie变成了一个会话cookie。
答案 1 :(得分:1)
首先,不是一个很好的做法,要求您的用户清除所有Cookie ,以使您的网页运行正常。
其次,您没有说明您使用的浏览器,因为这是浏览器的一部分,当您清除Cookie时,您还需要关闭浏览器,或者至少没有打开您的页面(因为您说“刷新”这页纸”)。如果您已经清除了cookie,但是您已经在浏览器上打开了该页面,那么浏览器一直保留该页面的cookie - 是已经完成的渲染的一部分,是javascript全局的一部分该页面的值,因此cookie存在,直到您关闭和您的页面。清除所有cookie并不清楚活动内存,只需从缓存中删除所有cookie文件。
最后,我建议为您的页面流操作考虑不同的方法,而不是要求您的用户清除所有Cookie。