You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
    
    赋予执行权限:
    sudo chmod +x /usr/local/bin/clean-php-sessions.sh
    
    添加到cron每小时执行:
    sudo crontab -e
    
    新增一行:
    0 * * * * /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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:37:04