在页面卸载时cookie过期,然后在下一个页面加载时设置cookie
Expiring a cookie on page unload, then setting cookie on next page load
当请求页面时,我在PHP中通过setcookie('animals, json_encode(array('tiger')), time()+(3600*24), '/');
设置cookie animals
然后我用
使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的新参数?
可能的解决方案(我称之为"hack")是为每个cookie添加唯一标识符(即时间戳),因此animals-1407435704,以便每个页面加载都有自己的cookie。我也可以从PHP回显document.cookie
,设置cookie,所以在页面加载后,JS设置cookie。但是,我宁愿看到一个解决方案,指示浏览器不删除cookie。
Update:我要给每个cookie添加一个唯一的标识符,因为我实际上需要考虑多个选项卡正在打开(并允许它们各自存在)。我不知道为什么浏览器会这样做
我认为这个解决方案应该重置cookie:
document.cookie = 'animals=; Max-Age=0'
你能做的就是检查cookie是否存在,然后做出相应的反应。
如果cookie在新加载时仍然存在,则继续检查延迟直到删除,然后再次添加它:
waitToSetCookie(){
if (checkCookie(animals))
setTimeout(waitToSetCookie(), 1000);
else
setcookie('animals, json_encode(array('tiger')), time()+(3600*24), '/');
}
- 如何从另一个域加载cookie
- cookie加载事件页面重定向
- cookie更改时自动重新加载(自动刷新)html页面
- 无法获取表单's面板的x和y坐标,并在加载时从cookie中设置它们
- 加载 cookie 后调用 JavaScript 函数
- 可以在不重新加载页面的情况下更新javascript中的cookie
- 在首次页面加载之前设置时区 Cookie
- 加载页面以获取cookie并同时读取源代码
- 基础 6 显示打开页面加载,cookie 不起作用
- 在网页上加载闪光横幅后添加cookie
- HTML 正文加载函数需要删除并使用 cookie 执行相同的函数,但只能进行第一次访问
- 将值存储到 Cookie 中,并在页面加载时显示这些值
- 如何将值从 cookie 加载到向导窗格 (dojo) 中的表单
- JavaScript:使用网站的 HTML 文档保存/加载 Cookie
- 跟踪 Cookie 以决定加载哪些图像
- 保存、从 cookie 加载时出现问题
- 将字体存储到 Cookie 并从 Cookie 加载
- 从cookie加载CSS类(带过渡),而不过渡到它们
- 向(输入)字段添加属性,以便下次通过cookie加载
- 使用cookie加载、保存和重置jquery值