Session-Cookie 未在 CORS 环境中发送
Posted
技术标签:
【中文标题】Session-Cookie 未在 CORS 环境中发送【英文标题】:Session-Cookie not sent in CORS environment 【发布时间】:2018-01-05 06:32:31 【问题描述】:我正在拼命尝试让会话 cookie 在我的环境中工作,但到目前为止还没有运气。
我的后端是一个 node/express 应用程序,在端口 3000 上运行。CORS 启用如下:
const corsOptions =
origin: "http://127.0.0.1:4300",
allowedHeaders: [ "Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "x-xsrf-token" ],
credentials: true
;
if (isDebug)
corsOptions.maxAge = 1;
app.use(cors(corsOptions));
我正在使用快速会话和护照登录。会话配置如下:
const options =
secret: '...',
cookie: httpOnly: true
;
app.use(session(options));
前端是 Angular 2 SPA,在端口 4300 上运行。当我从我的 express 服务器为前端提供服务时,一切都按预期工作。但如果不是,我会遇到以下晦涩的问题:
登录路由返回一个带有会话 ID 的 cookie。但是下一个对后端的请求是使用 不同 会话 ID 发送的?!我不知道这个不同的会话 ID 可能来自哪里。特别是因为会话 cookie 被标记为仅 HTTP。
HTTP 请求按如下方式发送:
const response = this.http.get(url, withCredentials: true );
我尝试了以下方法:
确保浏览器中允许第三方 cookie => 没问题。 试图将 httpOnly 设置为 false => 不走运。 使用 cookie 域进行实验:将其设置为后端地址 - 不走运。然后到前端的地址 - 也没有用。 已清除浏览器和 cookie 缓存,试用 Google Chrome 和 Edge。没有任何帮助。有人知道谜题的哪一部分丢失了吗?
非常感谢, 史蒂文
【问题讨论】:
【参考方案1】:Omg,我缩小了范围,终于找到了问题:
登录请求没有设置了 withCredentials-Flag...我认为只有在收到 cookie 之后,后续请求才需要这样做。但实际上它是用来存储跨域接收的 cookie 的。
【讨论】:
以上是关于Session-Cookie 未在 CORS 环境中发送的主要内容,如果未能解决你的问题,请参考以下文章
AWS Api Gateway 未在 204 上设置 CORS
Axios 未在请求中发送自定义标头(可能是 CORS 问题)