You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8.12搭配Ngrok使用时Session无法正常存取问题求助

Laravel Session 跨请求数据丢失排查指南

你遇到的每次请求CSRF _token 随机变化、自定义写入的Session数据跨请求无法读取,核心逻辑是请求之间没有正确复用同一个Session ID,导致每次访问都生成全新的空Session实例,可按以下顺序逐一排查解决:

第一步:校验浏览器端Cookie传递是否正常

  • 打开浏览器开发者工具的「应用-存储-Cookie」面板,先访问/set路由,检查对应域名下是否生成了和配置匹配的Session Cookie(默认Cookie名可在config/session.php的cookie字段查看,通常为laravel_session)
  • 核对Cookie属性是否符合访问要求:
    • 本地http协议访问时,Cookie的Secure属性不能为true,否则浏览器会直接拦截、不存储该Cookie
    • Cookie的Domain字段必须和当前访问域名完全匹配,避免跨域拦截:本地访问对应域名为127.0.0.1,Ngrok公网访问对应域名为生成的临时Ngrok域名
    • 不要用无痕/隐私模式测试,这类模式默认会限制非必要Cookie的存储

第二步:核对Laravel Session配置是否匹配

  • 打开config/session.php文件,逐项校验配置项:
    • 确认driver字段指定的Session存储(file/database/redis等)对应路径/表的权限,是Web服务运行账号可读写的:比如使用file驱动时,storage/framework/sessions目录需开放可写权限,否则Session写入失败会触发每次请求自动新建Session
    • 确认expire_on_close字段为false:如果该值设为true,浏览器会话关闭后Session即失效,测试过程中如果没有保持Cookie关联,就会出现每次请求都是新Session的情况
    • 确认same_site、secure字段和访问场景匹配:本地http测试时不要强制开启secure=true,否则浏览器不会存储对应Cookie

第三步:检查Session中间件挂载是否正确

  • Laravel的Session持久化逻辑由StartSession中间件实现,需确认该中间件已正确挂载到对应路由组中
  • 如果你测试的路由定义在routes/api.php中,要注意API路由组默认不加载Session相关中间件,这种情况下需要在对应路由组手动挂载StartSession中间件,否则不会触发Session的读取、持久化逻辑

第四步:Ngrok公网访问场景特殊排查

  • 如果本地127.0.0.1的Session读写正常、仅Ngrok公网访问出现丢失,需要检查config/session.php的domain字段是否配置为对应Ngrok的公网域名,不要写死本地127.0.0.1,否则Ngrok域名下浏览器不会携带本地域的Cookie

异常对应关系:你观察到每次请求返回的_token值不同,正是因为每次请求都生成了全新的空Session实例,Laravel在空Session中会自动生成新的CSRF令牌,之前存储的data字段因为关联的旧Session ID没有被请求携带,自然无法被读取到。

内容的提问来源于stack exchange,提问作者Sachin Sarola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 04:45:03