【问题标题】:Why wouldn't express-session work when cookie is set to secure?当 cookie 设置为安全时,为什么 express-session 不起作用?
【发布时间】:2020-01-05 04:58:11
【问题描述】:

为什么会这样:

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

【问题讨论】:

    标签: express cookies session-cookies


    【解决方案1】:

    cookie 的secure 选项意味着 cookie 仅由浏览器通过 https 连接发送,在某些浏览器中,标记为“安全”的 cookie 甚至不会被浏览器保存以供将来请求使用如果它通过不安全的连接到达。

    您的服务器似乎是一个 http 服务器,因此 cookie 不会在后续请求中发送回您的服务器,从而使 cookie 消失。

    【讨论】:

    • 我忘了提到我的服务器启用了 SSL。网址是schandillia.com
    • @TheLearner - 此代码 right here 正在启动一个普通的 http 服务器,而不是一个 https 服务器。
    • 那么让 Nginx 代理将所有端口 443 的流量定向到端口 80 还不够吗?如果我在 express 中切换到 https,那会不会使 Nginx 配置变得多余?
    • @TheLearner - 好吧,该链中至少有两个机会阻止 cookie。它可能会被阻止从 Express 服务器出站,因为 Express 服务器看到连接不是 https。或者,它可能被 nginx 阻止入站并且没有被代理,因为它会通过 http 到达代理目的地。你必须要么研究他们的代码,要么在网络上做一些诊断工作,看看它是在哪里被阻止的。
    • @TheLearner - 对于初学者,查看浏览器中是否存在 cookie?它会到达那里并保存在那里吗?
    猜你喜欢
    • 2021-09-05
    • 2023-01-18
    • 1970-01-01
    • 2014-11-18
    • 2021-04-24
    • 2019-10-27
    • 2020-12-05
    • 2017-06-20
    • 2021-02-08
    相关资源
    最近更新 更多