Cookie 的 Domain 设置到底该怎么配才安全?

シ雪利 阅读 55

我在部署一个前后端分离的项目,后端设置 Cookie 时指定了 Domain 为 .example.com,但前端在子域名 app.example.com 下死活读不到这个 Cookie,是不是 Domain 配置有啥坑?

我试过不设 Domain、设成 example.com、也试过带点的 .example.com,但要么主站能读子站不能读,要么反过来。网上说法又乱,到底该怎么写才对?

/* 这是我前端用的跨域请求配置(虽然和 Cookie 不直接相关,但怕影响) */
.fetch('/api/login', {
  credentials: 'include'
})
我来解答 赞 13 收藏
二维码
手机扫码查看
2 条解答
FSD-新利
问题应该出在 Cookie 的 Domain 和 Path 配置上。首先,Domain 设置为 .example.com 是正确的,这样可以确保主站和子站都能访问这个 Cookie。但是,Path 默认是当前页面的路径,可能不是你想要的根路径,所以你需要显式地设置 Path 为 /。

其次,确保你的 fetch 请求正确设置了 credentials: 'include',这一步你已经做了,没问题。

你可以试试在后端设置 Cookie 时增加 Path 属性,比如这样:

res.cookie('cookieName', 'cookieValue', { domain: '.example.com', path: '/', secure: true, httpOnly: true });


这段代码设置了 Cookie 的 Domain 为 .example.com,Path 为根目录 /,并且启用了 secure 和 httpOnly 属性来增加安全性。注意,secure 属性意味着这个 Cookie 只能通过 HTTPS 协议发送。

改完之后,重启服务,然后清空浏览器缓存,重新测试一下。希望这次能解决问题。
点赞
2026-03-24 10:15
Mc.晨硕
Mc.晨硕 Lv1
Domain 设置成 .example.com 是正确的,但前端请求时需要确保 credentials 设置为 'include',你已经这样做了。检查一下后端是否设置了 SameSite 属性,可能是这个导致的。可以试试把 SameSite 设置为 None,并且 Secure 标志也要加上。
res.cookie('cookieName', 'cookieValue', { domain: '.example.com', sameSite: 'None', secure: true });
点赞
2026-03-22 12:05