我正在调用以下代码:
protected void SetCookieValue(
string sCookieName, object oValue, DateTime dtExpires)
{
Response.Cookies[sCookieName].Value = Utility.ToStringValue(oValue);
Response.Cookies[sCookieName].Expires = dtExpires;
Response.Cookies.Add(Response.Cookies[sCookieName]);
}
日期设定为30天:
SetCookieValue(sCookieName, null, DateTime.Now.AddDays(-30.0));
为了强制cookie过期。它正在开发我的开发箱(Windows 7,IIS7),但现在在IIS6上失败了。我没有更改此代码,它似乎已经工作了一年多,但在生产网站上,我无法清除此cookie。
IE8中的浏览器在compat模式下(用于命中开发和生产。
有什么想法吗?
感谢你朝着正确的方向努力。这就是我最终的结果:
protected void SetCookieValue(
string cookieName, object value, DateTime expireDate)
{
HttpCookie cookie = new HttpCookie(cookieName);
cookie.Value = Utility.ToStringValue(value);
cookie.Expires = expireDate;
if (Request.Cookies[cookieName] != null)
{
Response.SetCookie(cookie);
}
else
{
Response.Cookies.Add(cookie);
}
}
因此,当我杀死cookie时,我使用名称,空值和DateTime.MinValue到期日期来调用此方法。如果cookie存在,则会更新,如果不存在,则会在到期时添加。
我想使用相同的函数来创建或终止cookie,从而使其不受自己的DeleteCookie方法的影响。我还完全重命名了饼干,以确保我开始新鲜。我可能会得到一些用户的推迟,但哎呀! :)
谢谢!答案被标记为让我朝着正确方向前进的人。
答案 0 :(得分:6)
您应该从Request.Cookies检索Cookie,然后将过期的Cookie添加到Response.Cookies:
public void DeleteCookie(string cookieName)
{
if (Request.Cookies[cookieName] != null)
{
HttpCookie myCookie = new HttpCookie(cookieName);
myCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(myCookie);
}
}
答案 1 :(得分:1)
我不是asp.net专家,但是根本没有玩你的代码,对我来说唯一看起来很奇怪的是你正在打电话:
Response.Cookies.Add(Response.Cookies[sCookieName]);
已经打电话
Response.Cookies[sCookieName].Value = Utility.ToStringValue(oValue);
Response.Cookies[sCookieName].Expires = dtExpires;
这对我来说似乎是多余的,可能会导致一些奇怪的行为。而且,根据我有限的经验,前两行是你真正需要的。
另一种选择是,看到IE8仍处于预发布阶段,可能会遇到一些cookie处理问题。尝试使用其他浏览器,看看是否仍然可以获得相同的结果。