当 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 消失。