Laravel 5.5:laravel_session Cookie与XSRF Token丢失问题排查
我之前也碰到过类似的情况,启用会话加密后出现这类问题,大概率和加密密钥有效性、Cookie配置合理性或者会话存储权限有关,给你梳理几个关键排查和解决步骤:
1. 验证APP_KEY的有效性
Laravel的会话加密完全依赖.env文件中的APP_KEY,它必须是32位的随机字符串(格式为base64:xxx)。如果APP_KEY不正确或缺失,加密/解密会话数据会直接失败,导致浏览器无法识别laravel_session Cookie,进而丢失会话和XSRF Token。
- 先检查
.env文件中的APP_KEY是否存在且格式正确; - 如果不确定,执行命令重新生成(注意:生产环境要提前备份加密数据,新密钥会导致旧加密数据无法解密):
php artisan key:generate
2. 核对session.php中的核心配置
打开你的config/session.php,重点检查以下配置项:
加密开关确认
确保加密配置已正确启用(你提到已启用,再确认一次):
'encrypt' => true,
Cookie基础配置
- 路径(path):必须设为
'/',保证Cookie在整个域名下生效:'path' => '/', - 域名(domain):如果应用有子域名,设置为
.yourdomain.com(开头的点适配所有子域名);本地开发可留空或设为null:'domain' => env('SESSION_DOMAIN', null), - Secure Cookie:如果网站不是HTTPS协议,
secure必须设为false,否则浏览器会拒绝存储Cookie:'secure' => env('SESSION_SECURE_COOKIE', false),
3. 检查会话存储的权限
如果用默认的file会话驱动,要确保storage/framework/sessions目录有可写权限:
chmod -R 755 storage/framework/sessions chown -R www-data:www-data storage/framework/sessions # 根据你的服务器用户调整
如果是database驱动,确认session数据表已通过php artisan session:table和migrate创建,且数据库用户有写入权限。
4. 验证XSRF Token的传递逻辑
XSRF Token依赖会话存储,会话正常后Token通常会自动恢复。另外要确保前端请求正确携带Token:
- 表单提交时,页面要包含
csrf_token()生成的隐藏字段; - AJAX请求要在请求头中设置
X-XSRF-TOKEN,值为浏览器中XSRF-TOKENCookie的内容; - Laravel 5.5会自动设置
XSRF-TOKENCookie,只要会话正常,这个Cookie会自动生成。
5. 清除缓存和旧Cookie
最后执行以下命令清除配置缓存和会话缓存:
php artisan config:clear php artisan cache:clear php artisan session:flush
同时在浏览器中清除当前域名下的所有Cookie,重新访问应用测试。
内容的提问来源于stack exchange,提问作者gerger callanga
相关产品推荐
相关产品推荐

