如何使用 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.com
和bar.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中的元素数组中删除特定元素