无法从javascript中删除cookie

min*_*eow 23 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()
Run Code Online (Sandbox Code Playgroud)

应该将文档cookie设置为在1970年到期

但在那之后,我打电话

document.cookie.split(";")
Run Code Online (Sandbox Code Playgroud)

饼干似乎没有受到影响.有什么想法吗?

PS:上面的代码来自stackoverflow 使用JavaScript清除所有cookie

Sta*_*Lin 44

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

换一种说法:

 document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=[something];"
Run Code Online (Sandbox Code Playgroud)

"某些"价值需要与现有的cookie所设置的一致.

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

如果有帮助,请告诉我.

  • 我在IE和Edge中发现了此问题。最好始终将路径设置为某些内容,因为默认设置是设置cookie的页面。因此,如果您尝试在其他页面上使它过期,则该路径将不匹配,并且也不会过期。在IE和Edge中,似乎从document.cookie值中隐藏了过期时间和路径,因此您无法通过查看该值来得出cookie的设置位置。如果需要,将设置页面的路径保存在cookie值中,以便以后将其取出。或始终附加“; path = /;” Cookie值。那么它将从任何页面过期。 (2认同)

Wea*_*key 22

我遇到过同样的问题.我发现cookie是在一个空的子域下设置的,例如cookie域是".domain.com",我的网站是在"sub.domain.com"上托管的.

为了解决这个问题,我将cookie域添加到了设定值

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; domain=.domain.com";
Run Code Online (Sandbox Code Playgroud)

要查看Cookie设置的域,请在Chrome中打开开发工具 - >资源 - > Cookie并查看域字段.

  • 该解决方案适用于我们的实例。仅使用“expiry”和“path”参数无法清除我们的cookie,但添加“domain”参数后,问题就解决了。 (2认同)

Pon*_*boy 13

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

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

......有时它没有。

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

.mydoamin.com
sub.mydomain.com 
Run Code Online (Sandbox Code Playgroud)

所以,我的解决方案是创建一个通用函数,从所有域中删除 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;';
};
Run Code Online (Sandbox Code Playgroud)


Nic*_*s K 11

对我来说,问题是我设置的字段只有在设置 cookie 时覆盖它时才domain需要。因此,以下方法应该可以解决问题:

document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/"
Run Code Online (Sandbox Code Playgroud)