请求中包含 Cookie header,但表示 returns 空 Cookie(使用 Amazon Load Balancer)
Cookies included in request header, but express returns empty cookies (using Amazon Load Balancer)
我正在 fetch
从我的前端到我的 express 后端。但是将 req.cookies
表示为 ''
(空)。我正在使用 cookieParser。
为什么 express 找不到 cookie,即使浏览器显示正在发送 cookie?
注意:我正在使用负载均衡器转发的 cookie,它会进行身份验证并发送 session。
前端
fetch(`${MY_URL}/logout`, {
credentials: 'include',
})
NodeJS
const cookieParser = require("cookie-parser");
app.use(cookieParser());
app.get("/logout", (req, res, next) => {
console.log(req.headers) // see below
console.log(JSON.parse(JSON.stringify(req.cookies))); // logs {}
console.log(JSON.parse(JSON.stringify(req.signedCookies))); // logs {}
// do stuff with cookie
});
Headers
{
...
cookie: ''
}
Headers 中的 Cookie 是一个空字符串
网络选项卡:
成功了。最终解决方案是负载平衡器自动将这些 headers 静默转发到后端。对于我的 /logout
api,我没有尝试从 headers 中获取 cookie,而是无论如何设置它们。像这样:
app.get('/logout', (req, res) => {
res.cookie("AWSELBSessionCookie", "", {
maxAge: -1,
expires: Date.now(),
path: '/'
}
res.setHeader("Cache-Control", "must-revalidate, no-store, max-age=0");
res.setHeader("Pragma", "no-cache");
res.setHeader("Expires", -1);
res.redirect("https://my-login-page.com");
})
我正在 fetch
从我的前端到我的 express 后端。但是将 req.cookies
表示为 ''
(空)。我正在使用 cookieParser。
为什么 express 找不到 cookie,即使浏览器显示正在发送 cookie?
注意:我正在使用负载均衡器转发的 cookie,它会进行身份验证并发送 session。
前端
fetch(`${MY_URL}/logout`, {
credentials: 'include',
})
NodeJS
const cookieParser = require("cookie-parser");
app.use(cookieParser());
app.get("/logout", (req, res, next) => {
console.log(req.headers) // see below
console.log(JSON.parse(JSON.stringify(req.cookies))); // logs {}
console.log(JSON.parse(JSON.stringify(req.signedCookies))); // logs {}
// do stuff with cookie
});
Headers
{
...
cookie: ''
}
Headers 中的 Cookie 是一个空字符串
网络选项卡:
成功了。最终解决方案是负载平衡器自动将这些 headers 静默转发到后端。对于我的 /logout
api,我没有尝试从 headers 中获取 cookie,而是无论如何设置它们。像这样:
app.get('/logout', (req, res) => {
res.cookie("AWSELBSessionCookie", "", {
maxAge: -1,
expires: Date.now(),
path: '/'
}
res.setHeader("Cache-Control", "must-revalidate, no-store, max-age=0");
res.setHeader("Pragma", "no-cache");
res.setHeader("Expires", -1);
res.redirect("https://my-login-page.com");
})