增加 php 会话时间

新手上路,请多包涵

我正在尝试将我的 php 会话时间增加到 6 小时。

这是增加会话时间的代码:

 ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours

但是,它似乎只有 1 小时的会话时间。

非常感谢任何建议。

此外,如何测试此功能而不必等待 6 小时来查看我的会话是否超时。

原文由 Ken 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 302
1 个回答

场景

您正在运行 Debian Linux 或 Ubuntu Linux。您希望 PHP 会话的持续时间超过默认的 1440 秒(24 分钟)。所以你这样做:

 ini_set('session.gc_maxlifetime', 10800);    # 3 hours

使用此设置,会话应保持活动状态至少三个小时,只要用户不关闭浏览器即可。1

但无论您做什么,会话都会在 24-54 分钟后被删除。 PHP 似乎忽略了 gc_maxlifetime 设置。

为什么会这样

Debian 和 Ubuntu Linux 覆盖了 PHP 的会话行为。如果仔细观察,您会发现 session.gc_probability 设置为 0,这意味着 PHP 的垃圾收集将永远不会运行。相反,/etc/cron.d/php5 中有一个每 30 分钟运行一次的特定于 Debian 的 cron 作业!

cron 作业根据 php.ini 中的全局 session.gc_maxlifetime 进行垃圾收集。您应用中的 session.gc_maxlifetime 将被忽略。

解决方案

虽然您可以禁用 cron 作业和/或修改 php.ini,但我更愿意在不修改系统默认值的情况下解决问题。更好的解决方案是在正常目录之外的某个地方创建您自己的会话目录,然后在本地启用 PHP 的会话垃圾收集。

为此set session.gc_maxlifetime, session.gc_probability, session.gc_divisor, and session.save_path

 # Session lifetime of 3 hours
ini_set('session.gc_maxlifetime', 10800);

# Enable session garbage collection with a 1% chance of
# running on each session_start()
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);

# Our own session save path; it must be outside the
# default system save path so Debian's cron job doesn't
# try to clean it up. The web server daemon must have
# read/write permissions to this directory.
session_save_path(APP_PARENT_DIR . '/sessions');

# Start the session
session_start();

原文由 Rohìt Jíndal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏