按名称删除Cookie?


151

如何删除名称为的特定Cookie roundcube_sessauth

不应以下内容:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

然后:

<a href="javascript:del_cookie(name);">KILL</a>

杀死roundcube_sessauth饼干?


1
name?有什么意义呢?还是它是一个更通用的版本的宿醉,它允许您指定cookie名称?
paxdiablo 2012年

不要以为是骗子。它专门询问有关清除所有 cookie的问题。
paxdiablo 2012年

1
我不想删除所有cookie,只有一个。我从谷歌搜索中找到了基本代码。当然,我尝试了。@Paxdiablo我假设它是为cookie命名的,但是我可能完全错了。
查理2012年

@paxdiablo - ...How can I delete a specific cookie
德里克朕会功夫

1
@Derek等人,您似乎误会了。我说的是,Gabe建议的骗局根本不是骗局,因为建议的骗局询问要删除所有 cookie,而这个问题问要删除特定的 cookie。我没有以任何方式,形状或形式抱怨这个问题:-)
paxdiablo 2012年

Answers:


252

您应该定义cookie所在的路径,以确保删除正确的cookie。

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

如果未指定路径,浏览器将相对于您当前所在的页面设置一个cookie,因此,如果您在其他页面上删除该cookie时,另一个cookie继续存在。

根据@Evan Morrison的评论进行编辑。
请注意,在某些情况下,要标识正确的cookie,Domain则需要该参数。
通常将其定义为Domain=.yourdomain.com。在您的域名前加
一个意味着该cookie可以存在于任何子域中(www也算作子域)。

另外,如@RobertT的回答中所述,HttpOnly不能在客户端使用JavaScript删除cookie。


23
这真让我发疯!添加Path = /后,我可以删除。谢谢!
duyn9uyen 2014年

12
这应该是正确的答案,Path在大多数情况下,它是行不通的。
SuperMarco

9
在添加路径和正确的“ Domain = value”之前,我无法删除Cookie。'...所以我的陈述是:document.cookie =“ cookieName =; path = /; expires = Thu,1970年1月1日,格林尼治标准时间; domain = .myDomain.com”
Evan Morrison

1
该解决方案仍然有效,但是Max-Age=0如果您关心这样的事情,可以用稍微简洁一些。
MaxPRafferty

181

为了删除Cookie,请将expires日期设置为过去的某个日期。一个可以做到这一点的功能。

var delete_cookie = function(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
};

然后删除一个名为roundcube_sessauthdo 的cookie 。

delete_cookie('roundcube_sessauth');

1
我觉得这应该可以工作(看起来应该可以:D!),但是我正在查看我的页面在firefox中设置的cookie,当我单击“杀死”按钮时,cookie不会被删除。知道为什么吗?
查理

这适用于Google Chrome。安装firebug,看看是否有任何错误。

1
没有错误,我想这只是不删除Roundcube中的cookie。它可能删除其他cookie也就好了。
查理

39
对于寻求该问题答案的用户,请参见下面的答案。的path=/关键是对浏览器的兼容性很重要。
Bencripps 2015年

2
这个答案在Chrome上不适用于我,也没有在Firefox中尝试过。但是,下面的emii回答确实有效。
丹尼尔·F

11

//如果传递的exMins = 0,它将在创建后立即删除。

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

exMins在这个例子中是未定义的,您可能指的是exdays
bhurlow '16

是的..而是将参数改名改成exMins ..谢谢#BhBh
Kishor

7

我不确定这是否适用于12年5月之后的Roundcube版本,但是对于当前版本,答案是您无法roundcube_sessauth从JavaScript 删除cookie,因为它被标记为HttpOnly。这意味着无法从JS客户端代码访问它,并且只能通过服务器端脚本或通过直接用户操作(通过某些浏览器机制,例如集成调试器或某些插件)将其删除。


1

您可以尝试此解决方案

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.