在javascript中删除Cookie的方法是将过期日期设置为过去。现在这实际上并没有删除cookie,至少在Firefox中是这样。它只是意味着cookie将在浏览器关闭时被删除。
这对我们来说是一个问题:我们的产品涉及从潜在的许多网站归档网页,所有这些内容都存储在我们的服务器上。为了确保页面正确呈现,我们也包括所有js。但是,通常cookie由js设置,并且鉴于页面缓存在我们的服务器上,这些cookie设置在我们的域下。
因此,随着时间的推移,来自数十个存档网站的Cookie会在我们的域下构建。最终Cookie标头超出了最大内容长度,导致HTTP 400错误代码。
由于我们的客户主要在企业环境中,他们从不重启机器或关闭浏览器:它们可以保留数月。所以这种“软”删除不起作用,至少不可靠。
有没有办法在javscript中以会话方式删除cookie?或者,有没有办法阻止他们被设置?
答案 0 :(得分:5)
这是不可能的。期。几个星期以来,我一直在努力解决这个问题而没有找到解决方案。
发明cookie
getter / setter的人应该是%insert_painful_punishment_here%。
特别是Internet Exploder在删除cookie时是一种野兽。我不记得确切的问题,但我认为它涉及包含;
的https和cookie名称。
我所能提供的只是一种解决方法:发送一个包含400响应的响应正文,例如“请重新启动浏览器”。
答案 1 :(得分:3)
除了设置过去的到期时,请将值设置为空字符串。这至少会立即减少cookie的大小。
我认为应该在所有浏览器中立即删除cookie。例如,当我退出网站时,Firefox不要求我关闭浏览器以删除显示我已登录网站的cookie。如果没有发生这种情况,我建议您查看Firefox错误,并可能与它们打开一个新错误。
与此同时,我会查看我的网络服务器,看看是否可能将最大内容长度设置为高于现有的长度。
答案 2 :(得分:0)
你可以用新的cookie覆盖cookie。
答案 3 :(得分:-2)
“这是因为我们没有使用iframe,我们遇到了这个问题。我们的服务器正在呈现缓存页面,所以任何cookie都会在我们的域下设置。” --OP
如果你无法控制设置cookie的javascript(这看起来很奇怪,为什么你没有控制?),你可以不断读取和清空cookie,将数据转储到另一个更大的数据库(最好是服务器) - 或者HTML5客户端存储。)