清除Cookies不起作用?设置过期日期方法

时间:2009-03-14 03:41:07

标签: c# asp.net cookies

我正在调用以下代码:

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方法的影响。我还完全重命名了饼干,以确保我开始新鲜。我可能会得到一些用户的推迟,但哎呀! :)

谢谢!答案被标记为让我朝着正确方向前进的人。

2 个答案:

答案 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处理问题。尝试使用其他浏览器,看看是否仍然可以获得相同的结果。