【问题标题】:Extending the Session in PHP with gc_maxlifetime not working使用 gc_maxlifetime 在 PHP 中扩展会话不起作用
【发布时间】:2012-05-16 20:17:00
【问题描述】:

我有以下代码来扩展我的$_SESSION[] 变量。它们在大约 2-3 小时后到期。

我尝试通过更改 session.gc_maxlifetime 来延长到 22 小时,但几个小时后我仍然失去了我的会话。

//start sessions
ini_set('session.gc_maxlifetime', 60*60*22); // 22h - one day

//Output just to make sure config was changed.
echo ini_get("session.gc_maxlifetime"); 

session_start();

如何增加会话的持续时间?

【问题讨论】:

  • 22 小时是一天?我错过了什么吗?
  • w/e 将其更改为 24 小时,22 小时是为了避免在工作期间在上午 9 点重新登录。它会在早上 7 点左右让您注销,然后您在早上 9 点登录。
  • @mata 可能是因为他想防止用户每天早上同时打开浏览器时自动注销!?我认为这是一个非常聪明的解决方案。
  • 另外,如果您有多个 php.ini 用于一个站点,它可能对共享相同缓存文件夹的所有站点使用最短的 session.gc_maxlifetime。因为默认情况下,如果运行垃圾收集,每个会话文件都在同一个位置,它会在缓存中的所有文件上运行。

标签: php session php-ini


【解决方案1】:

是的,它可能是:session.cookie_lifetime,默认为 0,表示在关闭浏览器时终止。

如果您关闭客户端并再次打开它 session.gc_maxlifetime 无关紧要 - 它仅适用于未终止的会话。

或者,您可能在其他地方更早地调用会话开始,并且 session.gc_maxlifetime 更小。通常框架会设置这一点。重复调用会话开始不会改变会话。

【讨论】:

  • 我可以关闭并重新打开浏览器,我的会话正常。
  • @EtienneDupuis 你的 session.cookie_lifetime 设置是什么?
  • 另外,在浏览器中检查会话 cookie 并查看生命周期是多少...它应该至少与您选择的 gc_maxlifetime 一样长。
【解决方案2】:

尝试在 php.ini 中更改它!由于会话生命周期是文件系统的事情,每个脚本的设置总是有问题的。

【讨论】:

    【解决方案3】:

    关于这个有一个注释on the manual page;如果另一个使用同一目录存储会话数据的脚本没有设置 maxlifetime,它将使用较短的值。

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 1970-01-01
      • 2012-11-16
      • 2012-01-22
      • 2015-02-19
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      相关资源
      最近更新 更多