gpt4 book ai didi

php - 增加 php session 时间

转载 作者:IT王子 更新时间:2023-10-29 00:06:26 25 4
gpt4 key购买 nike

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

这是增加 session 时间的代码:

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

然而,它似乎只有 1 小时的 session 时间。

非常感谢任何建议。

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

最佳答案

场景

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

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

使用此设置,只要用户不关闭浏览器, session 就应该保持事件状态至少三个小时。1

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

为什么会这样

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

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

解决方案

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

为此设置 session.gc_maxlifetime、session.gc_probability、session.gc_divisor 和 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();

关于php - 增加 php session 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5238136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com