Laravel 8迁移至新域名后POST请求出现419页面过期问题
解决Laravel迁移域名后POST请求419/Ajax CSRF Token不匹配问题
以下是针对该问题的具体排查和解决步骤:
修正Session与CORS域名配置
打开config/session.php,确认domain字段设置为新域名(比如.yournewdomain.com支持二级域名,或直接写完整域名);同时检查config/cors.php中的allowed_origins数组,将新域名加入其中,确保跨域请求被允许。另外,.env文件里的SESSION_DOMAIN要同步设置为新域名,不要带http://或https://前缀。调整Cloudflare缓存与安全设置
- 登录Cloudflare后台,针对新域名的POST路由(或整个应用页面)创建页面规则,设置缓存级别为“忽略缓存”,避免Cloudflare缓存了包含过期CSRF令牌的页面。
- 检查Cloudflare的SSL模式,确保设置为“完全”或“严格”,避免SSL层问题导致Cookie无法正常传递;同时确认“Cookie Security”设置未过度限制新域名的Cookie发送。
重置Session相关存储与密钥
再次执行以下命令确保彻底重置:php artisan key:generate php artisan cache:clear php artisan session:clear php artisan config:clear手动删除
storage/framework/sessions目录下的所有文件,清除旧的Session数据。前端CSRF令牌校验检查
- 所有POST表单必须包含
@csrfBlade指令,确保表单提交时携带有效令牌。 - Ajax请求需在请求头中携带
X-CSRF-TOKEN,可以通过页面meta标签获取并全局配置:<meta name="csrf-token" content="{{ csrf_token() }}">// 以jQuery为例 $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
注意不要前端缓存令牌值,确保每次请求都获取最新的令牌。
- 所有POST表单必须包含
验证服务器目录权限
确认storage/framework/sessions、storage/framework/cache等目录的权限为755或775,确保Laravel拥有读写权限,避免Session无法正常存储。
内容的提问来源于stack exchange,提问作者Mohamed Mehanny
相关产品推荐
相关产品推荐

