2011-04-16 121 views
12

我在外部网站上,我试图通过javascript删除cookie。无法从javascript中删除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"; 
    } 
} 

deleteAllCookies() 

这应该设置文档的cookie在1970年

但在那之后到期,我叫

document.cookie.split(";") 

的饼干似乎没有任何变化。任何想法为什么?

PS:上面的代码是从计算器 Clearing all cookies with JavaScript

+1

只能删除那些你从删除它们的域的Cookie。您无法删除跨域Cookie。 – 2011-04-16 18:08:41

+0

您是否在使用火虫进行调试? document.cookie的价值是什么? – 2011-04-16 18:15:00

+0

发布您的cookie数据。它在这里为我工作:http://jsfiddle.net/WbGYV/1/ – Calum 2011-04-16 18:16:06

回答

16

我有同样的问题。我发现cookie被设置在一个空的子域下,例如Cookie域名是“.domain.com”,我的网站是在“sub.domain.com”托管的。

要解决我加入了Cookie域设定值

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.domain.com"; 

要查看域的cookie设置为,在Chrome中,开放式开发工具 - >资源 - >饼干,并期待在域名领域。

27

我刚碰到这个问题,最后解决了它。您的Cookie最有可能不会被删除,因为当您设置新值时,它必须与您尝试删除的原始cookie的路径和域匹配。

换句话说:

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=[something];" 

那“东西”值需要与任何现有的cookie已设置排队。

JS调试器可能不会告诉你路径和域名的详细信息,但如果你在你的Chrome->设置或类似位置查找现有cookie的值,它将变得很明显哪一个你不匹配Firefox/Safari/IE中的面板。

让我知道是否有帮助。

+1

我在IE中发现这个问题和Edge。最好总是设置路径,因为默认设置是设置cookie的页面。因此,如果您尝试在不同的页面上过期,路径将不匹配,并且不会过期。在IE和Edge中,它似乎隐藏了document.cookie值的过期时间和路径,因此您无法通过查看该值来推导cookie的设置位置。如果需要,可以将设置页面的路径保存在cookie值中,以便稍后将其拉出。或者总是附加“; path = /;”到cookie的价值。那么它将从任何页面过期。 – 2016-02-28 08:01:42

+0

工程。最佳解决方案 – Sibidharan 2016-05-30 06:30:13

+0

节省了我的时间。谢谢 :) – 2016-11-13 13:31:57

0

我正在研究一个浏览器书签从当前域中删除cookie,我有同样的问题,我的问题是我没有使用域。这里是我的书签最终值。

javascript: (function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";domain=." + location.host.split('.').slice(-2).join(".") +";path=/"); }); })(); 

请注意,我替换 “domain.com” 与location.host.split( '')切片(-2)。加入( “”),这样我总是得到没有子域名的域名,即mail.google.com将成为google.com。设置cookie将到期时,我们应该忽略subdemain(至少在我的情况是这样。

0

Clear session cookies in ie11?

可能是上面的链接可以给一个帮助

只要运行的JavaScript像下面

document.execCommand("ClearAuthenticationCache") 

我试过了,cookie被清除了。

0

我在尝试删除某些Cookie时遇到类似问题。有时,这种工作:

document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;';

...有时它没有。

在查看Chrome Inspector(应用程序选项卡 - >存储侧栏 - > Cookies)后,我注意到一些Cookie设置了不同的域。例如:

.mydoamin.com 
sub.mydomain.com 

所以,我的解决方案是制作一个通用函数,从所有域中删除cookie。

var deleteCookie = function(name) { 
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=.mydomain.com;'; 
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;domain=sub.mydomain.com;'; 
};