使用Javascript真正删除cookies

13

在JavaScript中删除cookie的方法是将过期日期设置为过去。但至少在Firefox浏览器中,这并不会真正删除cookie。它只是意味着cookie将在浏览器关闭时被删除。

对我们来说,这是一个问题:我们有一个产品涉及归档来自潜在的许多站点的网页,并将所有内容存储在我们的服务器上。为了确保页面正确呈现,我们包括所有JS。然而,通常由JS设置Cookie,在我们的域下缓存的页面会在我们的域下设置这些Cookie。

因此,随着时间的推移,来自数十个已归档站点的Cookie在我们的域下累积。最终,Cookie头超过最大内容长度,导致HTTP 400错误代码。

因为我们的客户大多处于企业环境中,他们从不重新启动计算机或关闭浏览器:它们可能运行数月之久。因此,这种"软件"删除不起作用,至少不可靠。

是否有任何物理方式在JavaScript中删除Cookie?或者,是否有任何方法可以阻止它们被设置?


为什么标题超过了最大内容长度? - ninjagecko
1
因为用户归档的站点在我们的域名下设置了cookie。归档的站点越多,设置的cookie就越多。更明确地说:用户会查看像这样的归档页面:http://ourdoamin.com/page-from-archived-site.html。因此,如果此页面在js中设置cookie,则该cookie将在ourdomain.com下设置。 - Richard H
请澄清“用户归档设置cookie在我们的域名下的站点”。如您所知,其他域无法在您的域名下设置cookie,因此它们必须使用iframe或其他方式,而必须设置这些cookie,对吗?只使用一个cookie有什么问题吗? - ninjagecko
@ninjagecko,我认为他们正在获取其他人的网站,并且存档的JavaScript正在设置cookie。 - gpojd
1
正是因为我们没有使用iframes,才会出现这个问题。缓存的页面是由我们的服务器呈现的,因此任何cookie都在我们的域下设置。 - Richard H
4个回答

5

这是不可能的。我已经苦苦挣扎了几周,也没有找到解决方案。

发明cookie getter/setter的人应该受到%insert_painful_punishment_here%的惩罚。

特别是Internet Exploder在删除cookie方面非常棘手。我不记得确切的问题是什么,但我认为它涉及https和包含;的cookie名称。

我能提供的只是一个解决方法:在400响应中发送一个响应体,例如“请重新启动您的浏览器”。


3
除了将过期时间设置为过去,还需将值设置为空字符串。这样至少会立即减小Cookie的大小。
我认为所有浏览器都应立即删除Cookies。例如,当我从网站退出登录时,Firefox不需要我关闭浏览器来删除Cookie,以显示我已登录到该站点。如果没有发生这种情况,建议您查看Firefox的错误,并可能向其提出新问题。
同时,建议检查Web服务器并查看是否可以将最大内容长度设置为比当前更高的值。

是的,我们正在做这个,但是过长的cookie名称并没有帮助 :) - Richard H

0
你可以用一个新的cookie覆盖原来的。

但是,即使您将内容设置为“”,Cookie仍然存在,并且仍会对Cookie头长度产生影响。 - Richard H

-2
“这是因为我们没有使用iframes,所以才会出现这个问题。缓存的页面是由我们的服务器呈现的,因此任何cookie都在我们的域下设置。”--OP
如果您无法控制设置cookie的JavaScript(这似乎非常奇怪,为什么您没有控制权?),您可以不断读取和清空cookie,并将数据转储到另一个更大的数据库中(最好是服务器端或HTML5客户端存储)。

啊,多个莫名其妙的踩,没有任何解释,尽管我明确地解决了楼主的问题...(耸肩 好吧) - ninjagecko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接