可通过四种方法清理PHP Session文件:一、启用PHP内置GC机制,调整session.gc_probability、gc_divisor和gc_maxlifetime;二、配置Cron定时执行find命令清理过期文件;三、编写PHP脚本并用宝塔计划任务每日执行;四、修改PHP-FPM池配置注入清理钩子。

如果您在宝塔面板托管的网站中发现PHP Session文件持续堆积,导致磁盘空间被大量占用或Session读写变慢,则可能是由于PHP默认未配置自动清理机制。以下是实现定期清理PHP运行产生的Session文件的多种方法:
一、启用PHP内置Session垃圾回收机制
PHP本身提供session.gc_*系列配置项,通过调整其概率与生命周期参数,可使每次请求时有一定几率触发Session文件清理。该方式无需额外脚本,依赖PHP-FPM进程自然执行。
1、登录宝塔面板,进入【网站】→选择对应站点→点击【设置】→切换到【PHP版本】选项卡。
2、点击当前PHP版本右侧的【设置】按钮,进入PHP配置页面。
立即学习“PHP免费学习笔记(深入)”;
3、在【配置文件】中找到session.gc_probability和session.gc_divisor两项,将其修改为:session.gc_probability = 1 与 session.gc_divisor = 100。
4、查找session.gc_maxlifetime,根据实际业务会话有效期设定合理值,例如:session.gc_maxlifetime = 1440(单位:秒,即24分钟)。
5、保存配置后,返回PHP设置页点击【重载配置】使更改生效。
二、配置系统级Cron定时任务清理指定Session路径
当PHP内置GC不可靠(如使用文件存储且并发低导致触发率不足),可绕过PHP机制,直接对session.save_path目录下的过期文件进行扫描删除。该方式精准可控,适用于所有Session存储类型为files的情况。
1、确认当前PHP的session.save_path路径:在PHP配置文件中查找session.save_path,常见路径为/tmp/php-session或/www/wwwroot/your-site/runtime/session等。
2、登录宝塔面板,进入【计划任务】→点击【添加计划任务】。
3、任务类型选择【Shell脚本】,执行周期设为【每天】,时间建议设为凌晨低峰期(如02:00)。
4、在脚本内容中输入以下命令(请将/tmp/php-session替换为实际路径):find /tmp/php-session -name 'sess_*' -mmin +30 -delete(此例清理修改时间超过30分钟的Session文件)。
5、点击【添加任务】并确保状态为启用。
三、使用宝塔计划任务调用PHP脚本执行定向清理
通过编写独立PHP脚本,可实现更灵活的清理逻辑,例如按文件名匹配、排除特定前缀Session、记录清理日志等。该方式便于调试与审计,且不依赖系统find命令的权限限制。
1、在服务器任意安全路径下新建PHP清理脚本,例如/www/server/php/clean_session.php。
2、编辑该文件,写入如下内容(请替换$sessionPath为真实路径,并确认PHP用户对该路径有读写权限):<?php $sessionPath = '/tmp/php-session'; $lifetime = 1440; $now = time(); foreach (glob($sessionPath . '/sess_*') as $file) { if (filemtime($file) + $lifetime < $now) { @unlink($file); } } ?>。
3、在宝塔【计划任务】中新增任务,类型选【PHP脚本】,执行周期设为每日,脚本路径填写/www/server/php/clean_session.php。
4、点击【添加任务】,完成后可手动点击【执行】测试脚本是否正常运行。
四、修改PHP-FPM池配置启用清理钩子(仅限高级用户)
部分PHP-FPM部署支持在pool配置中注入pre_request或php_admin_value指令,可强制每次请求前执行清理动作。该方式需谨慎操作,避免影响性能,仅适用于自定义编译或深度运维环境。
1、进入宝塔面板【软件商店】→找到已安装的PHP版本→点击【设置】→切换至【配置修改】页签。
2、在配置文件末尾添加以下内容(注意替换路径与PHP版本号):php_admin_value[session.save_path] = "/tmp/php-session" 和 php_admin_value[session.gc_maxlifetime] = 1440。
3、若使用systemd管理PHP-FPM,可编辑对应服务文件,在[Service]段追加:ExecStartPre=/usr/bin/find /tmp/php-session -name 'sess_*' -mmin +60 -delete。
4、保存配置后,在SSH中执行:systemctl daemon-reload && systemctl restart php-fpm-74(请将74替换为实际PHP版本号)。











