为什么不';当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?它能到达那里并在那里得到拯救吗?