【问题标题】:Delete cookie by name?按名称删除 cookie?
【发布时间】:2012-05-22 12:12:54
【问题描述】:

如何删除名为 roundcube_sessauth 的特定 cookie?

不应该如下:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

然后:

<a href="javascript:del_cookie(name);">KILL</a>

杀死roundcube_sessauth cookie?

【问题讨论】:

  • name?那有什么意义呢?或者它是一个更通用的版本的遗留物,它允许你指定 cookie 名称?
  • 不要认为这是骗人的。它专门询问清除 所有 cookie。
  • 我不想删除所有的cookies...只有一个。我通过谷歌搜索找到了基本代码。当然我试过了。 @Paxdiablo 我以为它是为了命名 cookie,但我可能完全错了。
  • @paxdiablo - How can I delete a specific cookie...
  • @Derek 等人,您似乎误解了。我是说 Gabe 提议的欺骗根本不是欺骗,因为提议的欺骗询问有关删除 all cookie 的问题,而这个问题询问有关删除 specific cookie 的问题。我没有以任何方式、形状或形式抱怨这个问题:-)

标签: javascript cookies


【解决方案1】:

您应该定义 cookie 存在的路径,以确保删除正确的 cookie。

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

如果您不指定路径,浏览器将设置一个相对于您当前所在页面的 cookie,因此如果您在其他页面上删除该 cookie,另一个 cookie 将继续存在。

根据@Evan Morrison 的评论进行编辑。
请注意,在某些情况下,要识别正确的 cookie,Domain 参数是必需的。
通常定义为Domain=.yourdomain.com
在您的域名前放置一个 dot 意味着此 cookie 可能存在于任何子域(www 也算作子域)。

另外,正如@RobertT 的回答中提到的,HttpOnly cookie 无法在客户端使用 JavaScript 删除。

【讨论】:

  • 这把我逼疯了!添加 Path=/ 后,我就可以删除了。谢谢!
  • 这应该是正确的答案,大多数情况下没有Path是不行的。
  • 在添加路径和正确的 'Domain=value; 之前,我无法删除 cookie; ' ...所以我的声明是:document.cookie = "cookieName= ; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=.myDomain.com"
  • 这个解决方案仍然有效,但如果你关心这些事情,可以用Max-Age=0写得更简洁一些。
【解决方案2】:

为了删除 cookie,请将 expires 日期设置为过去的某个时间。执行此操作的函数将是。

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

然后删除一个名为roundcube_sessauth的cookie就行了。

delete_cookie('roundcube_sessauth');

【讨论】:

  • 我觉得这 应该 工作(它看起来应该工作:D!),但我正在查看我的页面在 Firefox 中设置的 cookie,当我单击“杀死”按钮,cookie 不会被删除。知道为什么吗?
  • 这适用于谷歌浏览器。安装firebug,看看有没有错误。
  • 没有错误,我猜它只是没有删除 Roundcube 中的 cookie。它可能会很好地删除其他cookie。
  • 对于寻找此问题答案的用户,请参阅下面的答案。 path=/ 键对于浏览器兼容性很重要。
  • 这个答案在 Chrome 上对我不起作用,在 Firefox 中没有尝试过。但是emii在下面的回答确实有效。
【解决方案3】:

//如果传递了exMins=0,它会在创建后立即删除。

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

【讨论】:

  • exMins 在此示例中未定义,您可能是指 exdays
  • 是的.. 而是将参数 exdays 重命名为 exMins.. 谢谢#BhBh
【解决方案4】:

我不确定这是否是 12 年 5 月 Roundcube 版本的情况,但对于当前版本,答案是您不能从 JavaScript 中删除 roundcube_sessauth cookie,因为它被标记为 HttpOnly .这意味着它不能从 JS 客户端代码访问,只能通过服务器端脚本或直接用户操作(通过某些浏览器机制,如集成调试器或某些插件)来删除。

【讨论】:

    【解决方案5】:

    你可以试试这个解决方案

    var d = new Date();
    d.setTime(d.getTime());
    var expires = "expires="+d.toUTCString();
    document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;" + expires;
    

    【讨论】:

      【解决方案6】:

      在我的例子中,我为不同的环境使用了打击代码。

        document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
      

      【讨论】:

        猜你喜欢
        • 2017-11-03
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        相关资源
        最近更新 更多