无法从javascript中删除cookie

时间:2011-04-16 18:06:41

标签: javascript cookies

我在外部网站上,我正在尝试通过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:上面的代码来自stackoverflow Clearing all cookies with JavaScript

6 个答案:

答案 0 :(得分:40)

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

换句话说:

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

“某事物”的价值需要与现有的cookie所设定的一致。

JS调试器可能不会向您提供有关路径和域的详细信息,但如果您在Chrome-&gt;设置或类似设置中查找现有cookie的值,那么您将无法匹配哪一个? Firefox / Safari / IE中的面板。

如果有帮助,请告诉我。

答案 1 :(得分:19)

我有同样的问题。我发现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中打开开发工具 - &gt;资源 - &gt; cookie并查看域名字段。

答案 2 :(得分:0)

我正在使用浏览器书签来删除当前域中的Cookie,我遇到了同样的问题,我的问题是我也没有使用域名。这是我的bookmarklet值最终:

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=/"); }); })();

请注意,我会替换&#34; domain.com&#34;使用location.host.split(&#39;。&#39;)。slice(-2).join(&#34;。&#34;)以便我总是获得没有子域名的域名,即邮件。 google.com将成为google.com。设置cookie到期时我们应该忽略子域(至少在我的情况下是这样的。

答案 3 :(得分:0)

Clear session cookies in ie11?

可能是上面的链接可以提供帮助

只需像下面那样运行JavaScript

document.execCommand("ClearAuthenticationCache")

我试过了,cookie被清除了。

答案 4 :(得分:0)

尝试删除某些Cookie时,我遇到了类似的问题。有时这很有效:

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

......有时却没有。

在查看Chrome检查器(应用程序选项卡 - &gt;存储侧栏 - &gt; Cookie)后,我注意到某些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;';
};

答案 5 :(得分:0)

对我来说,问题是我设置了domain字段,仅当您设置Cookie时您覆盖了该字段,才需要。因此,以下方法可以解决问题:

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"
相关问题