Windows本地Docker环境中Laravel应用CSRF Token不匹配问题求助
检查Cookie的域名/路径配置
Docker本地开发常用localhost、127.0.0.1或自定义域名(如laravel.test),需确认.env里的SESSION_DOMAIN与当前访问域名完全匹配,localhost场景直接留空或设为localhost即可,不要额外加端口号。同时确认SESSION_PATH保持默认的/,避免因路径错误导致Cookie无法正常携带。验证请求中Token的实际携带情况
打开浏览器开发者工具(F12)的Network面板,查看POST请求的详细信息:- 表单提交场景:确认Form Data里的
_token字段值,和页面渲染时csrf_token()输出的内容完全一致; - AJAX请求场景:检查请求头的
X-CSRF-TOKEN或请求体里的_token参数是否正确。
同时查看Response Headers中的Set-Cookie,确认Session Cookie已正常返回并被浏览器存储。
- 表单提交场景:确认Form Data里的
检查Docker端口映射与Cookie SameSite设置
若本地使用非80/443端口(如8000、8080),将.env里的SESSION_SAMESITE设为Lax(本地开发场景足够)。另外需确保Docker端口映射后,容器内应用能正确识别请求的真实域名和端口,避免因内外端口不一致导致Cookie校验失败。清理Session与配置缓存
- 手动清除浏览器对应域名的Cookie;
- 进入Docker容器执行Laravel缓存清理命令:
php artisan cache:clear php artisan config:clear php artisan session:clear
避免旧配置缓存干扰校验逻辑。
检查反向代理的头部传递(若启用)
若使用Nginx等反向代理容器,需在配置中传递正确的请求头部,确保Laravel能识别真实请求环境:proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme;同时在
.env中设置APP_TRUSTED_PROXIES=*(本地开发可临时使用),或在config/trustedproxy.php中添加代理服务器IP到信任列表。确认Token生成与Session存储的一致性
检查页面渲染时的csrf_token()是否来自当前有效Session,避免页面加载前出现Session重置操作。另外确认容器内Session存储驱动(默认是file)的读写权限,storage/framework/sessions目录需确保www-data用户可读写,防止Session无法正常存储导致每次请求生成新Token。
内容的提问来源于stack exchange,提问作者Bruno Rangel

