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

登录后设置cookie失效,assets子域中间件读取token cookie为空问题

问题原因

  • Cookie Domain未正确配置为支持子域名共享:当前设置Cookie时指定的Domain值为project.test,虽然新浏览器规范下配置根域名默认允许子域名访问,但部分旧浏览器、Laravel默认Cookie配置逻辑可能需要显式声明允许子域名访问;如果config('app.frontend_url')配置错误、解析结果带前缀,也会导致Cookie仅能在project.test下生效,子域名assets.project.test无法读取。
  • Cookie的SameSite、Secure属性配置不匹配:Laravel默认Cookie配置的same_site值为lax,如果静态资源被跨站引用、本地开发用HTTP协议却开启了secure属性,都会导致Cookie不会随请求发送到assets.project.test。
  • 跨域请求未开启凭证传输:设置Cookie的接口在api.project.test域名下,如果前端调用该接口时没有开启withCredentials配置,浏览器会直接拒绝接收跨域响应的Set-Cookie头,导致Cookie根本没有写入浏览器。

解决方案

1. 修正Cookie的Domain配置

修改响应Cookie的代码,显式将Domain设置为开头带点的根域名.project.test,兼容所有浏览器的子域名共享规则:

protected function respondWithToken(string $token): JsonResponse
{
    $expiresIn = auth('api')->factory()->getTTL() * 60;
    // 显式指定支持所有子域名的根域名
    $cookieDomain = '.project.test';
    // 如果需要从配置读取可改用下面的写法
    // $cookieDomain = '.'.parse_url(config('app.frontend_url'), PHP_URL_HOST);

    return response()
        ->json([
            "access_token" => $token,
            "token_type" => "bearer",
            "expires_in" => $expiresIn
        ])
        ->withCookie('token', $token, $expiresIn, '/', $cookieDomain);
}

2. 调整Cookie全局配置

在项目的config/session.php或config/cookie.php中调整配置:

  • 本地开发使用HTTP协议时,将secure设置为false,否则Cookie仅会在HTTPS请求下发送
  • 将same_site设置为lax即可满足同站子域名的Cookie传输需求,如果需要跨站使用可设置为none(注意设置为none时必须同时开启secure属性)

3. 修正跨域请求配置

  • 前端调用api.project.test/auth/login接口时必须开启withCredentials配置,Axios示例如下:
axios.post('http://api.project.test/auth/login', 请求参数, {
  withCredentials: true
})
  • 后端api.project.test的CORS配置中,需要将Access-Control-Allow-Credentials设置为true,且Access-Control-Allow-Origin不能设置为*,必须显式指定允许的域名如http://project.test
  • 如果是通过JS主动请求assets.project.test下的资源,也需要在请求配置中开启withCredentials: true,确保Cookie随请求发送

4. 验证Cookie写入状态

可以打开浏览器开发者工具的「Application/应用」面板,查看project.test域名下的Cookie列表,确认tokenCookie是否存在、Domain值是否为.project.test、过期时间是否正常。

内容的提问来源于stack exchange,提问作者thomas paulson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:36:07