当 cookie 设置为安全时,为什么 express-session 不起作用?
Why wouldn't express-session work when cookie is set to secure?
为什么这样做:
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。
cookie 的 secure
选项意味着 cookie 仅由浏览器通过 https 连接发送,在某些浏览器中,标记为 "secure" 的 cookie 甚至不会被保存如果它通过不安全的连接到达,则由浏览器用于将来的请求。
您的服务器似乎是一个 http 服务器,因此 cookie 不会在后续请求中被发送回您的服务器,从而使 cookie 消失。
为什么这样做:
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。
cookie 的 secure
选项意味着 cookie 仅由浏览器通过 https 连接发送,在某些浏览器中,标记为 "secure" 的 cookie 甚至不会被保存如果它通过不安全的连接到达,则由浏览器用于将来的请求。
您的服务器似乎是一个 http 服务器,因此 cookie 不会在后续请求中被发送回您的服务器,从而使 cookie 消失。