1

我已经看到这个问题问了几十次,但没有一个答案有效。

我有会话数据($_SESSION['name']例如),即使在用户关闭浏览器窗口并打开新浏览器后它仍然可以访问。这发生在 chrome 和 FF 中,而不是 IE 中。

我需要一种方法来在用户访问我的网站时为用户生成随机数据,并在他打开浏览器窗口时保留该数据(即使他在其他网站上也是如此)。但是如果他关闭并打开一个新的浏览器窗口,那么我想再次生成随机数据。

4

3 回答 3

1

您需要在浏览器关闭后删除会话 cookie。这是通过 session.cookie-lifetime设置完成的:

session.cookie_lifetime integer session.cookie_lifetime 以秒为单位指定发送到浏览器的 cookie 的生命周期。值 0 表示“直到浏览器关闭”。

您可以添加php.ini,也可以使用session_set_cookie_paramssession.cookie_lifetime = 0为每个请求手动设置它

session_set_cookie_params(0); // Call before session_start
session_start(); 
于 2012-11-26T03:41:00.290 回答
1

会话 cookie 保存在临时内存中,只有在浏览器关闭时才会被删除,这与根据配置的生命周期删除的持久性 cookie 不同。

即使用户通过关闭窗口离开您的站点,这并不意味着浏览器本身会关闭,因此“会话”cookie 可能会由浏览器自行决定保持活动状态。一方面,Firefox 在该领域有一些有趣的行为

也许在每个浏览器会话一页的早期,关闭窗口通常意味着关闭整个浏览器,因此这个问题可能不像现在那么普遍。

底线是基于打开和关闭浏览器窗口的会话 cookie 的行为根本不可靠,您应该找到其他方法来完成您需要的操作。设置明确的生命周期实际上可能对您有用。

于 2012-11-26T03:40:34.350 回答
0

$_SESSION默认情况下,当您的浏览器关闭时总是结束,但如果您仍想使用您使用的上一个会话

您可以使用session_set_cookie_parameters()在开始会话之前为会话 cookie 提供非零生命周期,或将session.cookie_lifetime设置为非零。

于 2012-11-26T03:45:10.307 回答