为什么这样做:
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进行身份验证。
注意:此问题可能与this one类似,但投票最多的答案并未完全解决该问题。它说httpOnly
引起了问题,但我不明白为什么会这样?没有在客户端上设置cookie,对吗?
相关文件位于https://github.com/amitschandillia/proost/blob/master/web/routes/auth-routes.js。
注意2 :服务器已启用SSL,URL为https://www.schandillia.com。
答案 0 :(得分:0)
cookie的secure
选项表示该cookie仅由浏览器通过https连接发送,并且在某些浏览器中,标记为“安全”的cookie甚至不会被浏览器保存用于将来会请求它是否通过不安全的连接到达。
您的服务器似乎是http服务器,因此在后续使cookie消失的请求上,cookie不会被发送回服务器。