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

生产环境Firefox未设置Cookie,Chrome正常,求解决办法

解决Firefox中跨站Cookie无法设置的问题

问题分析

前后端均部署在Vercel上,登录请求已携带withCredentials: true,Chrome能正常设置Cookie,但Firefox中存储面板看不到Cookie,且控制台提示Cookie缺少Partitioned属性。这是因为Firefox默认启用Total Cookie Protection,会隔离第三方Cookie,当前Cookie配置未适配该规则;同时Chrome也开始要求跨站Cookie添加该属性,避免未来被拦截。

解决方案

1. 给Cookie添加Partitioned属性

修改服务端设置Cookie的代码,在配置项中新增partitioned: true,保留原有安全属性:

export const genTokenAndSetCookie = (userId, res) => {
  const token = jwt.sign({ userId }, process.env.JWT_SECRET, {
    expiresIn: "151d",
  });

  res.cookie("jwt", token, {
    httpOnly: true,
    maxAge: 151 * 24 * 60 * 60 * 1000,
    sameSite: "None",
    secure: true,
    partitioned: true // 新增属性,适配浏览器分区存储规则
  });

  return token;
};

该属性会指示浏览器将Cookie存储在对应站点的独立分区中,既适配Firefox的Total Cookie Protection,也解决Chrome的警告提示。

2. 确认Vercel的CORS配置正确

确保服务端CORS配置允许携带凭证,且Origin指定为客户端的Vercel域名(不能用*,带凭证时通配符无效):
以Express的cors中间件为例:

const corsOptions = {
  origin: process.env.CLIENT_URL, // 客户端实际域名,如https://your-client.vercel.app
  credentials: true
};
app.use(cors(corsOptions));

需在Vercel环境变量中正确配置CLIENT_URL为客户端部署地址。

3. 验证Firefox隐私设置

检查Firefox是否开启Total Cookie Protection(默认开启),若手动关闭第三方Cookie拦截会影响功能,但保持默认设置即可,添加Partitioned属性后就能适配默认规则。

原理说明

Firefox的Total Cookie Protection会将不同站点的Cookie分区存储,跨站请求的Cookie若无Partitioned属性,会被隔离或拦截;Chrome也在逐步推行这一标准,控制台警告就是提示需添加该属性避免未来Cookie被拒绝。添加Partitioned属性后,Cookie可在对应站点分区中正常存储读取,同时保留httpOnly、secure等安全属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:05:04