1

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

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

4

3 回答 3

2

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

在默认配置中,会话意味着在浏览器关闭时“丢失”,因为浏览器将删除标识会话的 cookie。它仍然在服务器上的某个地方,直到会话垃圾收集将其删除。因此,长时间闲置的浏览器可能仍然会丢失它的会话,因为 PHP 会删除最近未使用的浏览器。

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

于 2013-03-14T19:22:36.600 回答
1

会话变量不会过期。会话到期受制于session_gc.maxlifetime和其他配置选项

会话与浏览器无关。但是,浏览器可能会选择不向服务器发送所需的信息,以便服务器恢复较早的会话。这通常发生在浏览器将所有 cookie 视为会话 cookie 时。

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

于 2013-03-14T19:23:29.703 回答
1

取决于:

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

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

于 2013-03-14T19:24:10.670 回答