Laravel项目迁移至新服务器后出现CSRF token不匹配问题求助
Laravel迁移新服务器后CSRF Token不匹配问题排查与解决
以下是针对该问题的具体排查和修复步骤:
一、检查.env核心配置项
- 确认
APP_URL设置为新服务器的HTTPS地址:APP_URL=https://www.vennocracy.com - 设置
SESSION_SECURE_COOKIE=true(HTTPS环境必须开启,确保Cookie仅通过加密连接传输) - 配置
SESSION_DOMAIN=.vennocracy.com(带前置点,支持主域名及子域名的会话共享,若仅主域名使用也可留空让Laravel自动识别)
二、清理服务器缓存与权限
执行以下命令刷新Laravel配置和缓存:
php artisan config:clear php artisan cache:clear php artisan view:clear php artisan route:clear
同时确保storage/framework/目录下的sessions、cache子目录拥有服务器进程的读写权限(通常设置为755或775)。
三、验证Cookie与HTTPS配置
- 检查Nginx/Apache的HTTPS站点配置,确保Cookie的
Path设置为/,未被限制到特定子路径 - 确认SSL证书有效且浏览器信任,证书异常会导致浏览器拒绝存储会话Cookie,进而引发令牌不匹配
- 若服务器开启了HTTP/2,可暂时关闭测试,部分HTTP/2环境下的头处理逻辑可能影响CSRF令牌的传递
四、优化CSRF令牌传递逻辑
除了在AJAX请求头中设置X-CSRF-TOKEN,可尝试将令牌直接加入FormData:
// 在submitHandler中添加 let formData = new FormData(form); formData.append('_token', $('meta[name="csrf-token"]').attr('content')); // 后续AJAX的data参数改为formData data: formData,
同时确认页面头部已正确输出CSRF meta标签:
<meta name="csrf-token" content="{{ csrf_token() }}">
五、检查会话存储驱动
- 若使用
file驱动,确认storage/framework/sessions目录可正常写入 - 若使用
redis/database等远程驱动,验证新服务器与对应服务的连接正常,会话无法持久化会导致令牌验证失败
内容的提问来源于stack exchange,提问作者Ravi Makwana
相关产品推荐
相关产品推荐

