用户在浏览器关闭后无法访问会话数据

时间:2012-11-26 03:26:03

标签: php session browser

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

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

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

3 个答案:

答案 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设置为非零。