在请求页面时,我在PHP中通过animals
设置了Cookie setcookie('animals, json_encode(array('tiger')), time()+(3600*24), '/');
。
然后我在第unload
页上的Cookie到期时使用:
window.addEventListener('unload', function() {
document.cookie = 'animals=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
});
这会将Cookie设置为已过期。这很有效。
问题,当我刷新页面时,setcookie()
尝试设置cookie,但浏览器将cookie设置为过期,因此浏览器在PHP时删除cookie回来而不是使用新的数据/到期时间。因此cookie被删除,我在页面加载后无法访问animals
。
在FF和Chrome中都会发生这种情况。问题仅在于页面刷新;如果我去另一个站点然后回来,或者第一次来到页面,那么cookie就会被正确设置。
有什么方法可以让浏览器了解不删除cookie,而是使用新参数?浏览器何时决定删除cookie,为什么不查看来自PHP的新参数?
可能的解决方案(我称之为“hacks”)是为每个cookie添加一个唯一的标识符(即时间戳),因此动物-1407435704,以便每个页面加载都有自己的cookie。我也可以从PHP中回显document.cookie
来设置cookie,所以在页面加载之后,JS会设置cookie。但是,我宁愿看到一个解决方案,指示浏览器不要删除cookie。
更新:我要为每个Cookie添加一个唯一标识符,因为我实际上还需要考虑打开多个标签(并允许它们各自存在)。我要打开这个问题,因为我不明白为什么浏览器会这样做。
答案 0 :(得分:0)
我认为此解决方案应该重置cookie:
document.cookie = 'animals=; Max-Age=0'
答案 1 :(得分:0)
您可以做的是检查并查看cookie是否存在,然后做出相应的反应。
如果cookie仍然存在新的负载,请继续检查延迟直到删除,然后再次添加:
waitToSetCookie(){
if (checkCookie(animals))
setTimeout(waitToSetCookie(), 1000);
else
setcookie('animals, json_encode(array('tiger')), time()+(3600*24), '/');
}