我正在尝试将我的 php 会话时间增加到 6 小时。
这是增加会话时间的代码:
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours
但是,它似乎只有 1 小时的会话时间。
非常感谢任何建议。
此外,如何测试此功能而不必等待 6 小时来查看我的会话是否超时。
原文由 Ken 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试将我的 php 会话时间增加到 6 小时。
这是增加会话时间的代码:
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours
但是,它似乎只有 1 小时的会话时间。
非常感谢任何建议。
此外,如何测试此功能而不必等待 6 小时来查看我的会话是否超时。
原文由 Ken 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答3.1k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
场景
您正在运行 Debian Linux 或 Ubuntu Linux。您希望 PHP 会话的持续时间超过默认的 1440 秒(24 分钟)。所以你这样做:
使用此设置,会话应保持活动状态至少三个小时,只要用户不关闭浏览器即可。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
: