改了 session.gc_maxlifetime 仍失效,是因为需同步配置 session.gc_probability 和 session.gc_divisor 并重启 Apache;若用 Redis 存储则该值被忽略,须设 Redis TTL;还需检查 php.ini 路径、cookie_lifetime 及错误日志。

只改 session.gc_maxlifetime 没用,XAMPP 本地开发中 session 过早失效,90% 是因为 session.gc_probability 和 session.gc_divisor 没配对生效,或者没重启 Apache。
为什么改了 session.gc_maxlifetime 还是 24 分钟就失效
默认值 session.gc_maxlifetime = 1440(24 分钟)确实控制服务端 session 文件的“理论存活上限”,但它不自动触发清理——真正删文件靠的是概率机制:session.gc_probability / session.gc_divisor。XAMPP 默认常为 1/1000,也就是平均每 1000 次请求才检查一次过期文件。本地低流量环境可能一整天都不触发 GC,但你却观察到 session 突然失效,原因往往是:
- 你实际在用 Redis 或其他外部存储(
session.save_handler = redis),此时session.gc_maxlifetime完全被忽略,得靠 Redis 自身 TTL 控制 - PHP 启动时读取的不是你编辑的
php.ini,而是另一个路径(查phpinfo()页面底部 “Loaded Configuration File”) - 代码里调用了
session_set_cookie_params(0)或框架自动重设了gc_maxlifetime(如 Laravel、ThinkPHP 的 session 配置)
必须同步修改的三个参数:位置、值、重启要求
XAMPP 的 php.ini 路径固定:C:\xampp\php\php.ini(Windows)或 /Applications/XAMPP/xamppfiles/etc/php.ini(macOS)。打开后搜索并确认以下三行未被注释,且值协调:
使用 Playwright 为 jimeng.jianying.com 管理浏览器会话,导入 cookies/localStorage 以自动化视频生成工作流,支持图片上传等功能
-
session.gc_maxlifetime = 28800(例如设为 8 小时,单位秒) -
session.gc_probability = 1和session.gc_divisor = 100(即 1% 概率触发 GC,比默认 1/1000 更适合本地调试) -
session.cookie_lifetime = 28800(必须与gc_maxlifetime一致,否则关浏览器就丢会话)
⚠️ 改完必须通过 XAMPP 控制面板完全停止再启动 Apache(Stop → Start),点 Restart 不一定 reload ini;仅刷新页面或重启 PHP 进程无效。
验证是否真生效:别只信 phpinfo()
phpinfo() 显示配置值只是第一步,关键看行为:
- 登录后打开浏览器 DevTools → Application → Cookies,确认
PHPSESSID的Expires / Max-Age是具体时间戳(非 “Session”) - 手动进入
session.save_path目录(默认C:\xampp\tmp),新建一个测试文件sess_test123,内容写user_id|s:3:"100";,修改其最后修改时间为 2 小时前,然后发起几次请求,观察它是否被自动删除 - 若仍失效,检查错误日志:
C:\xampp\apache\logs\error.log中是否有Failed to write session data (files)—— 这往往意味着磁盘满或权限不足,而非配置问题
session.gc_probability = 0 是危险操作
有人想“彻底禁用 GC 避免误删”,就把 session.gc_probability = 0。这会导致所有过期 session 文件永久堆积在 session.save_path,几天后目录占满,后续 session_start() 直接失败,报错类似:Warning: session_start(): Failed to write session data (files)。这不是 session 失效,是 PHP 根本写不进临时目录了。真要长期会话,应确保 session.save_path 可写且空间充足,并把 gc_maxlifetime 控制在合理范围(如 ≤ 604800 / 7 天),而不是关掉 GC。

















