【发布时间】: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。没有任何帮助。
有人知道谜题的哪一部分丢失了吗?
非常感谢, 史蒂文
【问题讨论】:
标签: angular express cookies cross-domain session-cookies