Ubuntu18.04下Apache+PHP7修改session.gc_maxlifetime不生效求助
解决PHP session.gc_maxlifetime修改后不生效的问题
我之前在Ubuntu 18.04的Apache+PHP7环境里也碰到过一模一样的坑,折腾了好半天才找到根源,给你几个实用的排查方向和解决办法:
1. 确认你修改的配置文件是唯一生效的那个
虽然phpinfo()显示加载的是/etc/php/7.0/apache2/php.ini,但系统里可能存在其他配置文件悄悄覆盖这个值:
- 用命令搜索整个PHP7.0配置目录下的相关设置:
这会列出所有包含这个配置的文件,比如grep -r "session.gc_maxlifetime" /etc/php/7.0/conf.d目录下的自定义配置片段,或者php.ini里不小心重复写了多行(后面的行会覆盖前面的)。确保只有你修改的那一行是session.gc_maxlifetime = 86400,其他地方的配置要么删掉要么改成相同的值。
2. 检查Apache配置是否强制覆盖了这个值
Apache的虚拟主机配置或者.htaccess文件里的php_value指令优先级会高于php.ini的全局设置:
- 搜索Apache配置目录里的相关设置:
如果找到类似grep -r "php_value session.gc_maxlifetime" /etc/apache2/php_value session.gc_maxlifetime 1440的行,把它改成86400或者直接删掉(如果不需要局部覆盖的话)。
3. 排查应用代码是否在运行时修改了配置
很多PHP框架(比如WordPress、Laravel)或者自定义脚本会用ini_set()动态修改session参数,这会直接覆盖php.ini的设置:
- 先写一个极简的测试文件
test.php,内容只有:
放在网站根目录访问,如果这个文件里的<?php phpinfo(); ?>session.gc_maxlifetime显示为86400,说明你的业务代码里有地方调用了ini_set('session.gc_maxlifetime', 1440),需要找到并修改那部分代码。
4. 确保Apache真的重启生效了
Ubuntu 18.04里正确的Apache重启命令是:
sudo systemctl restart apache2
不要用旧的service apache2 restart,有时候会出现配置未重载的情况。重启后可以用sudo systemctl status apache2确认服务状态,看"Active"行的时间是不是刚操作的时间。
5. 额外注意:如果用了PHP-FPM的情况(虽然你是Apache+mod_php,但以防万一)
如果你的环境实际是Apache搭配PHP-FPM(而不是mod_php),那还要修改/etc/php/7.0/fpm/php.ini里的对应值,然后重启PHP-FPM服务:
sudo systemctl restart php7.0-fpm
永久全局修改的步骤总结
- 用
grep -r "session.gc_maxlifetime" /etc/php/7.0/找到所有相关配置文件,统一设置为86400; - 检查Apache配置和
.htaccess,移除或修改php_value的覆盖设置; - 排查应用代码,确保没有动态修改该参数的
ini_set调用; - 用正确的命令重启Apache(或PHP-FPM,如果用到的话);
- 用极简
phpinfo()文件验证最终生效的值。
内容的提问来源于stack exchange,提问作者RocketNuts
相关产品推荐
相关产品推荐

