Express Cookie-当SameSite设置为';None';且Secure设置为true时,会话不保存Cookie [英] Express cookie-session not saving cookie when SameSite is set to 'none' and secure is set to true
本文介绍了Express Cookie-当SameSite设置为';None';且Secure设置为true时,会话不保存Cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用cookie-session和passportjs在我的Express应用程序中对用户进行身份验证。当我像这样初始化我的cookieSession时:
app.use(cookieSession({
maxAge: 24 * 60 * 60 * 1000,
keys: ['key1']
}));
我的Cookie已成功保存到客户端。但是,我正在处理的项目需要跨站点请求。因此,Cookie的安全属性必须设置为true,SameSite属性必须设置为None。在文档中,可以按如下方式设置这些值:
app.use(cookieSession({
maxAge: 24 * 60 * 60 * 1000,
secure: true,
sameSite: 'none',
keys: ['key1']
}));
但是,当我这样做时,cookie无法保存到客户端。我想知道是否有人知道如何修复此问题,或者为什么会发生此情况?
提前感谢您。
推荐答案
answer by Luka Darsalia向我显示,至少在我的情况下,服务器拒绝向客户端发送secure:true
cookie,因为它认为客户端不安全(因为request.protocol
是http
而不是https
)。
https
。但随后我想起,https
仅用于我的浏览器与Cloudflare CDN之间的连接--Cloudflare CDN与我的实际服务器之间的连接仍在使用http
。
因此,要修复它,我只需确保cookie-session(更具体地说,cookies包中的this line)连接是安全的,从而继续发送带有secure:true
标志的cookie。
为此,我只需在cookieSession
中间件之后添加以下中间件:
// your existing cookieSession init here
app.use(cookieSession({
[...]
secure: true,
sameSite: "none",
}));
// enable the "secure" flag on the sessionCookies object
app.use((req, res, next)=>{
req["sessionCookies"].secure = true;
next();
});
这篇关于Express Cookie-当SameSite设置为';None';且Secure设置为true时,会话不保存Cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文