当用户离开网页时,将cookie设置为过期。

3

目前,我的cookie设置为0,当用户关闭浏览器时过期。有没有办法将cookie设置为在用户离开我的网站时过期?

Cookie.write('cookieName', 'true',{duration:0});

我将“离开我的网站”定义为:完全转到另一个域名,如果用户在我的网站内浏览,我希望cookie仍然存在。

1
定义“离开您的网站”。他们可能只是在您的网站上导航到另一页或完全不同的网站。 - Brad M
1
为什么不使用会话Cookie呢?它更加方便,不需要任何技巧即可工作。此外,如果用户在短时间内离开并回来,他的数据仍然有效。 - Martin Müller
2个回答

5

由于无法预测用户何时离开页面,因此您可能需要在onbeforeunload事件上过期Cookie。

window.onbeforeunload = deleteMyCookie;

我还没有添加deleteMyCookie函数的实现 - 但基本上你可以用空字符串覆盖 cookie,并将到期时间设置为当前时间。

更新 - 您的问题编辑使此答案无效。在您的情况下,您不知道他们何时离开您的域 - 因此,您必须满足于设置基于时间的到期时间。您可以设置一个相当短的持续时间(例如5分钟),并在每次加载您站点上的页面时移动它 - 因此,在他们离开您的域后,cookie最多只能存在5分钟。


如果一旦你离开页面,cookies就过期了,那么使用cookies就没有意义。在这种情况下,JavaScript变量更加合适,尤其是因为onbeforeunload事件并不总是触发。 - Brad M
那要看情况。如果你正在进行许多AJAX请求,那么这些cookie将随着这些请求一起发送。我不是说这是这里的用例,但这是这种cookie的一个用途。 - Fenton
只有当他们导航到另一个域时,而不仅仅是导航到另一个页面时,我希望Cookie保持存在,只要他们在我的网站上。但是,如果他们去了另一个网站然后回来,它就不存在了。 - RSM

2
这是不可能的。Cookie标准没有设计支持这种情况。Cookie是关于HTTP请求和响应(在无状态协议中保持状态),而不是关于用户使用浏览器从一个不同域名的页面进入和离开,然后过期某些内容。
过期是基于时间(或浏览器会话),而不是基于浏览器选项卡会话、用户导航模式等。
如果您有一个支持每个互联网域的一个进程的浏览器(可能作为安全功能),并且设置仅允许每个进程使用cookie,这可能会在不进行其他操作的情况下起作用。然而,正如这个例子所示,这是基于浏览器的Cookie实现,与如何在Javascript中设置Cookie没有任何特定关系。

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