Session-Cookie未在CORS环境中发送

时间:2017-07-29 06:36:59

标签: angular express cookies cors session-cookies

我拼命想让会话cookie在我的环境中工作,但到目前为止没有运气。

我的后端是一个节点/快速应用程序,在端口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端口运行。当我从我的快递服务器提供服务时,一切都按预期工作。但是,如果没有,我会遇到以下难以理解的问题:

登录路由返回带有会话ID的cookie。但是后端的下一个请求是使用不同的会话ID发送的?!我不知道,这个不同的会话ID可能来自哪里。特别是因为会话cookie被标记为仅HTTP。

HTTP请求按如下方式发送:

const response = this.http.get(url, { withCredentials: true });

我尝试了以下内容:

  • 确保浏览器允许第三方Cookie =>没关系。
  • 尝试将httpOnly设置为false =>没有运气。
  • 使用cookie域进行实验:将其设置为后端的地址 - 没有运气。然后到前端的地址 - 也没有工作。
  • 清除了浏览器和Cookie缓存,尝试了Google Chrome和Edge。什么都没有帮助。

是否有人知道这个难题的哪个部分缺失?

非常感谢, 史蒂芬

1 个答案:

答案 0 :(得分:2)

Omg,我缩小了它,最后发现了问题:

的登录请求设置了withCredentials-Flag ...我认为只有在收到cookie之后才需要这些后续请求。但实际上它存储的是跨域接收的cookie。