如果document.cookie是一个字符串,为什么不将document.cookie =“”删除所有相关网站的cookie?

时间:2011-07-02 21:40:42

标签: javascript

我认为知道答案可以帮助我概念化浏览器存储的cookie与通过DOM提供的document.cookie之间的关系。

3 个答案:

答案 0 :(得分:10)

设置document.cookieDOM 2 HTML specification指定。将其设置为空字符串应该会导致根据该规范出错。

这是一个设计糟糕的界面。这种关系很糟糕。您不必将其可视化,您只需忍受它。

答案 1 :(得分:8)

document.cookie的行为并不正常。浏览器处理对大多数对象属性调用的读写调用document.cookie

设置document.cookie不会设置整个Cookie字符串。相反,它添加了cookie。例如:

alert(document.cookie); // The existing cookie string is "foo=bar; spam=eggs"
document.cookie = "hello=world; lol=cats";
alert(document.cookie); // The cookie string might now say "foo=bar; spam=eggs; hello=world; lol=cats"

虽然Cookie的顺序可能会有所不同,但该片段仍然说明了这一点。设置document.cookie设置指定的cookie,但不会因为新字符串中未提及cookie而删除cookie。犯错很容易。

当然,我不完全确定API是用这种方式构建的。我怀疑如果我们今天编写cookie API并且实际上有读,写,删除等功能,情况可能会有所不同。但是,这就是我们所拥有的。

答案 2 :(得分:2)

如前所述,document.cookie不是普通的字符串。当你阅读它时,你得到所有的cookie。设置它时,您设置一个新的cookie。因此,您不能以这种方式清除所有cookie。

如果您想清除所有Cookie,则同一主题还有其他一些SO问题。这个看起来很清楚:Clearing all cookies with JavaScript。您可以通过Google搜索how do you remove all cookies for a site with javascript找到数以万计的其他建议。