我想把我的php会话时间增加到6个小时.
以下是增加会话时间的代码:
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours
Run Code Online (Sandbox Code Playgroud)
但是,它似乎只有1小时的会话时间.
任何建议都非常感谢.
此外,如何测试此功能,而无需等待6个小时,以查看我的会话是否超时.
Roh*_*dal 10
场景
您正在运行Debian Linux或Ubuntu Linux.您希望PHP会话的持续时间超过默认的1440秒(24分钟).所以你这样做:
ini_set('session.gc_maxlifetime', 10800); # 3 hours
Run Code Online (Sandbox Code Playgroud)
使用此设置,只要用户不关闭浏览器,会话应至少保持活动状态三小时
但无论你做什么,会话都会在24-54分钟后被删除.似乎PHP忽略了gc_maxlifetime设置.
为什么会这样
Debian和Ubuntu Linux覆盖了PHP的会话行为.如果你仔细观察,你会发现session.gc_probability被设置为0,这意味着PHP的垃圾收集将永远不会运行.相反,在/etc/cron.d/php5中有一个Debian特定的cron作业,每30分钟运行一次!
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();
Run Code Online (Sandbox Code Playgroud)
小智 -23
用这个
ini_set('session.gc_maxlifetime', 6 * 60 * 60); // 6 Hours instead to this
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 1 Hours
ini_set('session.gc_maxlifetime', [hours] * [minutes] * [seconds]);
Run Code Online (Sandbox Code Playgroud)