为什么不';当cookie设置为安全时,express会话是否工作?
为什么这样做有效:为什么不';当cookie设置为安全时,express会话是否工作?,express,cookies,session-cookies,Express,Cookies,Session Cookies,为什么这样做有效: router.use(session({ name: process.env.SESSION_COOKIE, genid: () => uuidv4(), cookie: { httpOnly: true, }, secret: process.env.SESSION_SECRET, store: new RedisStore({ host: process.env.REDIS_HOST, port: process.en
router.use(session({
name: process.env.SESSION_COOKIE,
genid: () => uuidv4(),
cookie: {
httpOnly: true,
},
secret: process.env.SESSION_SECRET,
store: new RedisStore({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
ttl: 1 * 24 * 60 * 60, // In seconds
}),
saveUninitialized: false,
resave: false,
}));
但这不是吗
router.use(session({
name: process.env.SESSION_COOKIE,
genid: () => uuidv4(),
cookie: {
httpOnly: true,
secure: true,
},
secret: process.env.SESSION_SECRET,
store: new RedisStore({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT,
ttl: 1 * 24 * 60 * 60, // In seconds
}),
saveUninitialized: false,
resave: false,
}));
将secure
设置为true
会导致根本未设置会话cookie。FWIW,我正在使用PassportJS进行身份验证
注意:这个问题可能看起来很相似,但投票最多的答案并没有完全解决这个问题。它说httpOnly
导致了问题,但我不明白为什么会这样?客户端上没有设置cookie,对吗
有问题的档案在
注2:服务器启用SSL,URL为。cookie的
安全
选项表示cookie仅由浏览器通过https连接发送,在某些浏览器中,cookie标记为“安全”如果通过不安全的连接到达,浏览器甚至不会将其保存以备将来的请求
您的服务器似乎是http服务器,因此cookie不会在后续请求时发送回您的服务器,从而使cookie消失。我忘了提到我的服务器启用了SSL。URL为。@TheLearner-此代码启动的是普通http服务器,而不是https服务器。因此,使用Nginx代理将所有端口443通信定向到端口80是不够的?如果我在express中切换到https,这不会使Nginx配置冗余吗?@TheLearner-嗯,在该链中至少有两个机会阻止cookie。它可能被阻止从Express服务器出站,因为Express服务器发现连接不是https。或者,它可能被nginx阻止入站,而不被代理,因为它将通过http到达代理目的地。您必须研究他们的代码,或者在网络上进行一些诊断工作,以查看其被阻止的位置。@TheLearner-对于初学者,请查看浏览器中是否存在cookie?它能到达那里并在那里得到拯救吗?