【问题标题】:Making a cookie expire使 cookie 过期
【发布时间】:2012-04-29 21:57:07
【问题描述】:

我正在努力遵守关于 cookie 立法的新欧盟法律,并且需要在用户同意之前删除我网站上的所有 cookie。目前我已经成功使用了以下内容:

function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

然而,一旦这个进程运行,仍然有一个名为 ASP.NET_SessionID 的 cookie,它是由 ASP.NET 创建的。为了克服这个问题,我在 web.config 文件中设置了以下内容,该文件基本上将 sessionID 存储在 URL 中:

 <sessionState regenerateExpiredSessionId="true" cookieless="true" />

我遇到的问题是,当我设置 cookieless="true" 时,上面的 JavaScript 代码不再删除我的任何 cookie,就像它变得多余一样。当我设置 cookieless="false" 时,javascript 工作得很好。是否需要更改任何其他设置才能使两者协同工作?

谢谢

【问题讨论】:

  • 当关闭浏览器或所有页面时,此 cookie 将自动删除,因为它是会话 cookie(仅在当前会话中有效)。所以不用担心。您可以设置会话状态 cookie 过期的时间。

标签: javascript asp.net http cookies web


【解决方案1】:

如果不需要 session,可以禁用 sessionstate (mode="Off")

另外,我通常会清理服务器端的 cookie,就像这样(虽然它删除了 asp.net sessionid,但从不查看):

protected void Page_Load(object sender, EventArgs e)
{
    Response.BufferOutput = true;
    Session.Abandon();
    HttpCookieCollection cookies = Request.Cookies;
    var cookiesList = new List<String>();
    foreach (String cookieKey in cookies)
        cookiesList.Add(cookieKey);

    foreach (var cookieKey in cookiesList)
    {
    var cookie = new HttpCookie(cookieKey);
    cookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(cookie);
    }
}

希望这能有所帮助。

【讨论】:

  • 完美,我使用的 .net 代码似乎不起作用,但出于某种原因你的代码起作用了。谢谢
  • 很高兴我能帮上忙。顺便说一句:出于安全原因,会话 cookie 通常是“HttpOnly”,这会阻止来自客户端 (java) 脚本的访问。这可能就是你无法通过js清理它的原因。
猜你喜欢
  • 2014-02-28
  • 2016-03-05
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多