Symfony数据库存储的会话时长仅24分钟,配置后不生效如何解决?
你当前的配置只设置了客户端会话Cookie的有效期,没有调整服务端会话的最大存活周期,Symfony服务端默认的会话垃圾回收阈值为1440秒即24分钟,超过这个时长的会话会被服务端判定为无效并清理,这就是你会话仅24分钟失效的核心原因。
1. 调整framework.yaml的session配置
在原有session配置下追加服务端垃圾回收相关参数:
session: enabled: true handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler cookie_secure: 'auto' cookie_samesite: 'lax' cookie_lifetime: 604800 # 新增以下配置 gc_maxlifetime: 604800 # 服务端会话最大有效期,和Cookie有效期保持一致为1周 gc_probability: 1 gc_divisor: 100 # 每100次请求触发1次过期会话清理,可根据站点访问量自行调整
2. (可选)给PdoSessionHandler显式指定过期参数
为避免服务器PHP全局配置php.ini中的session.gc_maxlifetime参数覆盖项目配置,可在services.yaml中给PdoSessionHandler追加配置参数:
services: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler: arguments: - '%env(DATABASE_URL)%' - { gc_maxlifetime: 604800 }
3. 生效配置
修改完成后执行Symfony缓存清理命令让配置生效:php bin/console cache:clear
注意:修改前已生成的旧会话仍会按照原有规则过期,新生成的会话才会应用新的生命周期配置。
内容的提问来源于stack exchange,提问作者UXerUIer
相关产品推荐
相关产品推荐

