【问题标题】:How can I set presistent cookies on node.js with express-session?如何使用 express-session 在 node.js 上设置持久性 cookie?
【发布时间】:2020-05-16 00:22:59
【问题描述】:

我想创建预先存在的 cookie,这样我的应用程序的用户就不必在每次进入网络时都登录。但是,如果他/她曾经注销,则只需要登录即可。基本上,我想知道是否有办法将 maxAge 设置为无穷大(等效),并且即使用户关闭浏览器,cookie 也会持续存在。 这是我的代码:

app.use(expressSession({
  secret: '',
  resave: false,
  saveUninitialized: false,
  cookie: {
     secure: false,
     expires: false,
 }
}))

【问题讨论】:

    标签: node.js express cookies express-session


    【解决方案1】:

    根据标准,您不能将其设置为无穷大:

    最大年龄=价值 可选的。 Max-Age 属性的值是 delta-seconds, cookie 的生命周期,以秒为单位,十进制非负数 整数。为了正确处理缓存的 cookie,客户端应该 根据年龄计算计算cookie的年龄 HTTP/1.1 规范 [RFC2616] 中的规则。当年龄是 大于 delta-seconds 秒,客户端应该丢弃 曲奇饼。零值意味着 cookie 应该被丢弃 马上。

    http://www.faqs.org/rfcs/rfc2965.html

    但作为替代方案,您可以安全地将年龄设置为 5 年或 10 年后。这个时候用户很可能会摆脱他的设备/PC/移动设备。 :)

    更新:
    要设置将来的到期时间,您可以使用 MaxAge 如下,将其设置为一个月后到期:

    app.use(expressSession({
      secret: '',
      resave: false,
      saveUninitialized: false,
      rolling: true,
      cookie: {
         secure: false,
         maxAge: 30 * 24 * 60 * 60 * 1000
     }
    }))
    

    这会将其设置为过期

    【讨论】:

    • 感谢您的回答。我是否可以为我设置一个月的 cookie 年龄,但是每次用户在网络上时,都会重置计数。所以年龄回到了一个月,而不是从登录后的 1 个月减去时间?
    • 是的,你可以这样做,但如果用户一个月没有登录,那么 cookie 就会过期。
    • 如何配置它?那是 resave:false 参数吗?
    • 您需要为 maxAge 启用滚动,以便每次请求都会更新它。我现在还没有测试过这段代码,但这应该会让你朝着正确的方向前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2019-05-18
    • 2013-01-06
    • 2021-03-30
    • 2017-06-20
    相关资源
    最近更新 更多