【问题标题】:Clearing Cookies not working? Setting expire date method清除 Cookie 不起作用?设置过期日期方法
【发布时间】:2009-03-14 21:13:25
【问题描述】:

我正在调用以下代码:

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 浏览器(用于开发和生产。

有什么想法吗?


感谢您朝正确的方向轻推。这是我最终得到的结果:

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 方法之外。我还完全重命名了饼干,以确保我从新开始。我可能会得到一点用户的反对,但是哎呀! :)

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

【问题讨论】:

  • 我认为你的 if/else 的两半在功能上没有任何不同。他们都会在响应中将 cookie 发送回浏览器。

标签: c# asp.net cookies


【解决方案1】:

你应该从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);
    }
}

【讨论】:

  • 不,不应该,如果 cookie 不存在,则无需删除它。 ;)
  • 我的最终结果在上面。感谢您的推动。
【解决方案2】:

我不是 asp.net 专家,但根本不玩你的代码,唯一让我觉得奇怪的是你在打电话:

Response.Cookies.Add(Response.Cookies[sCookieName]);

在已经调用之后

Response.Cookies[sCookieName].Value = Utility.ToStringValue(oValue);
Response.Cookies[sCookieName].Expires = dtExpires;

这对我来说似乎是多余的,可能会导致一些奇怪的行为。而且,根据我有限的经验,前两行就是你真正需要的。

另一个选项是 IE8 似乎仍处于预发布阶段,它可能在 cookie 处理方面存在一些问题。换个浏览器试试看是否还是一样的结果。

【讨论】:

  • 领先您 1/2 步。在 Firefox 3 上尝试过,cookie 正确地死掉了。将尝试删除该行,但减轻它只是一个 IE8 问题(也许):)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多