php start_session()的范围是什么?

时间:2013-03-14 19:15:34

标签: php

session变量$_SESSION['']的范围是什么?如果我将一堆网页调查一个接一个地串在一起,session variable会在一定时间后过期,还是只要你不关闭浏览器就会存在?如果您休眠计算机会发生什么?

我在休眠后似乎丢失了一个会话变量,我不确定这是否是问题或是否存在其他问题。

3 个答案:

答案 0 :(得分:2)

由于多种原因,整个会话(不仅仅是单个变量)可以继续或丢失。

在默认配置中,当浏览器关闭时,会话意味着“丢失”,因为浏览器将删除标识会话的cookie。它仍然在服务器上的某个位置,直到会话垃圾收集删除它。因此,长时间处于空闲状态的浏览器可能仍然会松开它的会话,因为PHP会删除最近没有使用过的浏览器。

检查the configuration。特别是,如果您需要延长会话时间,可能需要根据需要调整“session.gc_maxlifetime”和“session.cookie_lifetime”。

答案 1 :(得分:1)

会话变量不会过期。 会话过期,以session_gc.maxlifetime and other configuration options为准。

会话与浏览器无关。但是,浏览器可能选择不将所需信息发送到服务器,以使服务器恢复先前的会话。当浏览器将所有cookie视为会话cookie时,通常会发生这种情况。

此上下文中的术语会话cookie 并不意味着包含会话标识符或会话变量的cookie。相反,它是一个cookie,一旦浏览器关闭就会消失(即浏览器前面的用户会话结束)。

答案 2 :(得分:1)

取决于:

  • Cookie的生命周期,0 表示',直到浏览器关闭',但firefox / mozilla倾向于查看它(由于他们'恢复会话'功能)为'永远'(这是恕我直言,安全问题所以你应该在接收空会话数组时重新生成你的id)。所以:依赖于用户代理。
  • 过时会话的已配置垃圾回收。请注意,您可以让Web服务器处理此问题(清理陈旧数据的X%更改),这使得它有点不可预测。但是,有些软件包(例如Debian上的PHP)只是使用cronjob来删除陈旧的会话,如果由于另一个服务器范围的设置而忽略了您的自定义session.gc_maxlifetime设置,这可能会造成严重破坏。

因此,换句话说,如果你的UA决定保留cookie,你的会话仍然存在,并且没有进程决定删除数据。这需要您了解UA和服务器的设置。