AWS EC2 Ubuntu实例中PHP Session超时功能失效问题排查
解决PHP Session无法自动过期的问题
1. 检查PHP核心Session配置
首先确认php.ini中的关键参数,路径通常为/etc/php/7.x/apache2/php.ini,替换7.x为你的具体PHP版本:
- 编辑配置文件:
sudo nano /etc/php/7.4/apache2/php.ini - 找到并修正以下参数:
session.gc_maxlifetime = 1800(30分钟,单位秒,确保数值正确)session.cookie_lifetime = 0(设为0表示Cookie随浏览器关闭失效,这是Session随浏览器关闭过期的关键)session.gc_probability = 1和session.gc_divisor = 100(控制PHP运行时触发垃圾回收的概率,默认1/100,避免设为0)
修改后重启Apache生效:
sudo systemctl restart apache2
2. 验证Ubuntu系统的Session垃圾回收定时任务
Ubuntu默认通过系统定时任务清理PHP Session文件,检查任务是否正常运行:
- 查看cron定时任务文件(以PHP7.4为例):
cat /etc/cron.d/php7.4 - 如果没有有效定时任务,手动创建清理脚本:
创建/usr/local/bin/clean-php-sessions.sh:
赋予执行权限:#!/bin/bash find /var/lib/php/sessions -type f -mmin +30 -delete
添加到cron每小时执行:sudo chmod +x /usr/local/bin/clean-php-sessions.sh
新增一行:sudo crontab -e0 * * * * /usr/local/bin/clean-php-sessions.sh
3. 检查Session存储目录权限
确保PHP进程对Session目录有读写权限:
- 默认Session目录为
/var/lib/php/sessions,查看权限:ls -ld /var/lib/php/sessions - 若权限不属于
www-data用户组,修正权限:sudo chown -R www-data:www-data /var/lib/php/sessions sudo chmod -R 733 /var/lib/php/sessions
4. 排查应用层代码干扰
检查你的PHP代码是否存在手动覆盖Session配置的逻辑:
- 是否调用
session_set_cookie_params()修改了Cookie有效期 - 是否错误使用
session_regenerate_id(true)导致Session持续保留 - 是否有代码在登录后手动延长Session有效期
5. 测试验证
修改配置后,登录系统并关闭浏览器,等待30分钟后再次访问,确认是否需要重新登录。也可手动删除Session文件快速测试:
sudo rm /var/lib/php/sessions/sess_*
再次访问网站,应触发重新登录流程。
内容的提问来源于stack exchange,提问作者Hkachhia
相关产品推荐
相关产品推荐

