jQuery,删除Cookie


90

我想使用JQuery删除cookie;我试过了

$.cookie('name', '', { expires: -1 });

然后刷新页面,cookie仍然存在:

alert('name:' +$.cookie('name'));

为什么?谢谢


某些浏览器仅在重新启动浏览器后才删除cookie。
ZOLDIK

Answers:


145

要使用JQuery删除cookie,请将值设置为null:

$.cookie("name", null, { path: '/' });

编辑:最终解决方案是path在访问cookie时显式指定属性,因为OP从不同目录中的多个页面访问cookie,因此默认路径是不同的(原始问题中未对此进行描述)。在下面的讨论中发现了该解决方案,该解决方案解释了为什么接受此答案-尽管不正确。

对于某些版本的jQ cookie,上述解决方案会将cookie设置为字符串null。因此不删除cookie。使用下面建议的代码代替。

$.removeCookie('the_cookie', { path: '/' });

但是从这里的源代码:plugins.jquery.com/files/jquery.cookie.js.txtif (value === null) { value = '';options.expires = -1;}来看,该函数位于处理函数内部,因此它们应该执行相同的功能。(参数为(name, value, options)
aularon

9
Cookie设置代码和测试代码是否在同一页面上?如果没有,您将需要path在两个命令的选项中显式设置,因为它默认为当前页面的路径。通过在读取和写入Cookie的所有位置均设置为您域的根进行测试:$.cookie('name', value, {path:'/'})
Chadwick 2010年

1
Chadwick>也许您是对的。对于exm。我在site.com中设置了cookie,然后进入site.com/user、site.com/user/mod、site.com/user/mod/new,我希望在所有此页面中都能看到Cookie。路径看起来如何像这样:{path:'/'}?
user319854'9

2
此代码不会删除Cookie,但会将其值设置为null。
Tomzan 2013年

12
-1,因为这实际上并未删除Cookie。$.removeCookie('cookie_name')做。
Rosdi Kasim 2013年

71

您可以尝试以下方法:

$.removeCookie('the_cookie', { path: '/' });

来源:https : //github.com/carhartl/jquery-cookie#readme


是的..我很好
灾变

使用子域时,可能还必须指定它。尤其是因为可能需要域名开头的时间段(.www.example.com)
Alexis Wilke,

请注意,这对我们不起作用,无论出于何种原因,这些代码都需要进入另一个函数。上面的$ .cookie('name',null)似乎更可靠。但是,此删除cookie可能对某些人有用。
Ligemer

这实际上是真正的答案!
Kalaschni 2015年

15

您也可以不使用jquery.cookie插件删除cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';

4

这是对cookie的误解的问题。浏览器不仅会识别键的cookie值,还会比较选项的路径和域。因此,浏览器会识别不同的值,即使用服务器设置选项(path ='/'; domain ='mydomain.com')且cookie为'name'且没有选项的cookie值将为cookie。



1

path设置时为我工作,即:

$.cookie('name', null, {path:'/'})

投票不足,您可以将我的答案复制并粘贴为您的答案
Otto Kanellis 2015年

1
@OttoKanellis,所以我建议也将接受的答案过低(因为它是在我回答后进行编辑的),并且也将您的答案过低(因为您没有突出显示path参数的重要性)!
Andron 2015年

-3

您正在执行的操作是正确的,问题出在其他地方,例如在刷新时以某种方式再次设置了cookie。


4
尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
Uri Agassi 2014年

对于这个答案,我要说的是OP的做法正确。复制粘贴OP代码将是多余的,而添加其他代码会使读者感到困惑。可以向上滚动并查看OP的操作,这是这里的“必要部分”。但是,如果您觉得最好包含一些内容(显然有些人这样做,...其中甚至有人否决了我的答案:)),只需编辑答案并据此进行修复即可。问候
aularon 2014年

链接的问题在于它们趋向于“腐烂”-它们会改变,移动,消失(例如,您的链接失效!)。这就是为什么我们希望您引述与它一起链接相关文字,所以你的答案将是自包含的(见meta.stackexchange.com/questions/8231/...
乌里阿加西

我对此很清楚,但是再次:这里不是这种情况。上面的整个答案可以重写为“您所做的是正确的,问题出在其他地方,例如,在刷新时以某种方式再次设置了cookie”。因此,同样,链接腐烂是一个问题,包括链接旁边的答案本身就是解决之道。这与这个答案无关。
aularon 2014年

因此,一次又一次,如果一个答案包含一个链接,而该链接已失效,则并不意味着答案不够好。某些链接只是用来提供其他详细信息,但对于答案的完整性而言不是必需的。在我看来,这种行为就像是一个编程不良的机器人,没有基本的NLP来理解上下文链接。您应该停止这样做。
aularon 2014年
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.