Apache不直接控制PHP会话垃圾回收概率,该行为由PHP引擎管理,可通过php.ini、.htaccess(仅mod_php)或ini_set()三种方式配置session.gc_probability与session.gc_divisor协同生效。

Apache 本身不直接控制 PHP 的会话垃圾回收概率,这个行为由 PHP 引擎自身管理。但你可以在 Apache 环境中通过三种方式生效配置:修改 php.ini、在 .htaccess 中用 php_value 设置,或在 PHP 脚本里用 ini_set() 动态设定。关键是要让 session.gc_probability 和 session.gc_divisor 协同工作,才能真正影响 GC 触发频率。
确认当前 GC 概率配置
先查清楚实际生效值:
<?php echo "gc_probability: " . ini_get('session.gc_probability') . "\n"; ?><?php echo "gc_divisor: " . ini_get('session.gc_divisor') . "\n"; ?><?php echo "触发概率: " . (int)ini_get('session.gc_probability') . "/" . (int)ini_get('session.gc_divisor'); ?>
如果输出是 1/100,表示默认每 100 次 session_start() 调用平均触发一次 GC。
在 php.ini 中全局设置(推荐)
打开你的 php.ini 文件(可通过 phpinfo() 查找“Loaded Configuration File”路径),添加或修改以下三行:
-
session.gc_maxlifetime = 3600 -
session.gc_probability = 1 -
session.gc_divisor = 1000
这样就把触发概率设为 1/1000,即平均每千次会话启动清理一次。适合中高流量站点,避免频繁磁盘扫描。
在 Apache 的 .htaccess 中设置(仅限 mod_php)
如果你无法修改 php.ini(如共享主机),且使用的是 mod_php(非 FPM),可在网站根目录的 .htaccess 中写:
php_value session.gc_maxlifetime 3600 php_value session.gc_probability 1 php_value session.gc_divisor 1000
⚠️ 注意:PHP 运行在 php-fpm 模式时,.htaccess 中的 php_value 不生效,必须改 php.ini 或 www.conf。
脚本内动态设置(调试或特殊逻辑用)
在调用 session_start() 前设置:
ini_set('session.gc_maxlifetime', 3600);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1000);
session_start();
该方式只对当前请求有效,不能替代全局配置。
重要提醒
- 如果启用了分级 session 目录(如
save_path = "2;/var/lib/php/sessions"),PHP 内置 GC 完全失效,无论gc_probability设多少都不起作用,必须靠外部脚本(如cron+find)清理。 -
gc_probability = 0并不等于“关闭 GC”,而是彻底禁用自动触发——过期 session 文件将永久堆积,务必配合定时清理。 - 多服务器部署时,所有节点必须统一
gc_maxlifetime,否则同一用户在不同机器上可能遇到 session 提前失效。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











