我看到这个问了几十次,没有一个答案有效。
我有会话数据(例如$_SESSION['name']
),即使用户关闭浏览器窗口并打开新浏览器,它仍可继续访问。这种情况发生在chrome和FF中,而不是IE中。
我需要一种方法为用户访问我的网站时生成随机数据,并在他的浏览器窗口打开时保留该数据(即使他是在其他网站上,是的)。但如果他关闭并打开一个新的浏览器窗口,那么我想再次生成随机数据。
答案 0 :(得分:1)
会话cookie保存在临时内存中,只有在浏览器关闭时才会被删除,这与根据配置的生命周期删除的持久性cookie不同。
即使用户通过关闭窗口离开您的网站,也不意味着浏览器本身关闭,因此"会话"浏览器可自行决定是否保留cookie。首先,Firefox在该领域有一些interesting behaviour。
也许在每个浏览器会话的一个页面的早期阶段,关闭窗口通常意味着关闭整个浏览器,因此这个问题可能不像现在这么常见。
最重要的是,基于打开和关闭浏览器窗口的会话cookie的行为根本不可靠,您应该找到其他方法来完成您的需要。设置明确的lifetime可能实际上适合您。
答案 1 :(得分:1)
您需要在浏览器关闭后删除会话Cookie。这是通过session.cookie-lifetime设置完成的:
session.cookie_lifetime integer session.cookie_lifetime指定 以秒为单位的cookie的生命周期,发送到浏览器。该 值0表示“直到浏览器关闭。”
您可以在php.ini中添加session.cookie_lifetime = 0
,也可以使用session_set_cookie_params
session_set_cookie_params(0); // Call before session_start
session_start();
{{1}}
答案 2 :(得分:0)
$_SESSION
始终在您的浏览器关闭时结束,但如果您仍想使用之前使用过的会话
您可以使用session_set_cookie_parameters()在会话开始前为会话Cookie提供非零生命周期,或将session.cookie_lifetime设置为非零。