如何使用 Javascript 从特定域中删除 cookie?

Posted

技术标签:

【中文标题】如何使用 Javascript 从特定域中删除 cookie?【英文标题】:How do I delete a cookie from a specific domain using Javascript? 【发布时间】:2013-07-20 13:29:40 【问题描述】:

假设我在http://www.example.com,我想删除一个域为 .example.com 的 cookie 和另一个域为 www.example.com 的 cookie .

我目前正在使用这个通用函数:

var deleteCookie = function (name)

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

这似乎只是删除域为 www.example.com 的 cookie。

但是我该如何指定,以便它也删除域为 .example.com 的 cookie?

编辑:基本上我正在寻找一个可以删除所有与http://www.example.com 相关的cookie 的功能,只要它们没有httponly 标志。有这样的功能吗?

【问题讨论】:

Clearing all cookies with javascript的可能重复 【参考方案1】:

为了安全起见,您不得在其他网站上编辑(或删除)cookie。由于无法保证您同时拥有foo.domain.combar.domain.com,因此您将无法从bar.domain.com 编辑foo.domain.com 的cookie,反之亦然。

考虑您是否被允许这样做并访问了恶意网站,然后返回您的银行,您将在那里将支票存入您的银行帐户。但是,当他们在恶意网站上时,他们用自己的银行信息更新了您的银行 cookie。现在,突然,支票将存入恶意网站所有者的银行账户。

【讨论】:

是的,我可以。我刚刚在 yahoo.com 上打开了我的 Chrome 控制台,我调用了我原来的帖子的功能,它删除了 www.yahoo.com 中设置的 cookie。但是我似乎无法删除 .yahoo.com cookie。我正在寻找一个可以通过指定要从中删除 cookie 的域来执行此操作的函数。 @TheRandomGuy Chrome 控制台的工作限制与从网站执行的代码不同。在foo.domain.com 网站上,您将无法编辑bar.domain.com 上的cookie。如果您不相信,请参阅othersimilarquestions。 我不打算从我的脚本不会触发的域中删除 cookie。我的脚本将被加载到例如www.someurl.com,我希望我的脚本从 www.someurl.com 和 .someurl.com 中删除最大数量的 cookie @TheRandomGuy 你找到解决方案了吗?【参考方案2】:

只有当您在 http://example.com 并且想要删除 http://blah.example.com cookie 时,您才能执行此操作。它也不能从 www.example.com 工作 - 只有“基本”域可以删除子域 cookie。

还有“全子域”cookie,以.开头,也只能被基域删除。

从基本域中,这应该可以删除它:

document.cookie = 'my_cookie=; path=/; domain=.example.com; expires=' + new Date(0).toUTCString();

或者使用优秀的 jquery.cookie 插件:

$.cookie('my_cookie',null, domain:'.example.com')

【讨论】:

"只有“基”域可以删除子域 cookie。"对我来说是至关重要的提示。【参考方案3】:

我们需要设置cookie来删除它们。

例子:

this.cookieService.set(cookiename, '', new Date('Thu, 01 Jan 1970 00:00:01 GMT'));

请参阅下面的 Git 位置以获取更多详细信息。 https://github.com/7leads/ngx-cookie-service/issues/5 https://github.com/angular/angular/issues/9954

【讨论】:

也许你应该指定这个 cookieService 来自哪里?【参考方案4】:

只是想添加到此注册。从子域中删除*** cookie。

我在引用的 js 文件 (mysub.mysite.se/file.js) 中使用以下脚本浏览“mysub.mysite.se”。

此代码确实删除了域为“.mysite.se”的 _fbp cookie。

document.cookie = '_fbp=;expires=Thu, 01 Jan 2010 00:00:00 UTC; path=/; domain=.mysite.se';
document.cookie = '_fbp=;expires=Thu, 01 Jan 2010 00:00:00 UTC; path=/; domain=www.mysite.se';
document.cookie ='_fbp=;expires=Thu, 01 Jan 2010 00:00:00 UTC; path=/; domain=mysite.se';

所以@kba 所说的并不是 100% 正确,但是当您尝试删除 3 方域上的 cookie 时就是这种情况。

【讨论】:

我也觉得奇怪的是,即使他们拥有 .domain.com,也不能保证自己拥有 subdomain.domain.com。你的代码对我有用。我想从子域中删除*** cookie。添加 domain=.domain.com 就可以了。

以上是关于如何使用 Javascript 从特定域中删除 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AngularJs 从输入或文本区域中删除特殊字符?

如何从javascript或jquery中的元素数组中删除特定元素

如何从javascript或jquery中的元素数组中删除特定元素

如何使用 C#4.0 从 xml 内容中删除特定的 xml 元素?

如何使用java脚本中的按钮从json数据中删除特定项目

让用户选择在文本区域中显示多少行 [HTML] [JAVASCRIPT?]