Node + Express 会话过期?

Posted

技术标签:

【中文标题】Node + Express 会话过期?【英文标题】:Node + Express Session Expiration? 【发布时间】:2012-08-03 08:04:07 【问题描述】:

我有一个快递应用程序,我有一个登录表单。我需要会话持续 1 个月,我是否将 maxAge 设置为以毫秒为单位的一个月。

我将两台计算机都打开并登录了 24 小时,当我回来时,两台计算机都已注销。

我该如何解决这个问题/实现我想要做的事情? 谢谢。

【问题讨论】:

【参考方案1】:

@Vadim Baryshev 接受的答案至少在最近的快速会话实现中存在缺陷。当您的应用程序启动时,您创建会话实现并设置最大年龄。至于用expires的答案,不推荐,坚持maxAge。

这意味着所写的 maxAge 示例将在服务器启动一个月后的每个会话中过期,并且将来创建的每个会话都将立即过期。在服务器重新启动之前,不会有任何有效的会话。

无需传递日期对象,只需将毫秒数传递给 maxAge 属性,如下所示:

app.use(
  session(
    ...,
    cookie: 
      maxAge: 30 * 24 * 60 * 60 * 1000
    
  )
);

【讨论】:

【参考方案2】:

您可以使用 expires 属性而不是 maxAge。它将 Date 对象作为值。此外,设置后检查客户端上的会话 cookie 过期。可能会话由服务器结束(即 memcached 重启)。

代码示例:

app.use(express.session(
   secret: "secret", store: new MemoryStore(), expires: new Date(Date.now() + (30 * 86400 * 1000)) 
  ));

但是

  app.use(express.session(
     secret: "secret", store: new MemoryStore(), maxAge: Date.now() + (30 * 86400 * 1000) 
    ));

对我也很好。

【讨论】:

app.use(express.session( secret: "secret", store: new MemoryStore(), expires: new Date(Date.now() + (30 * 86400 * 1000)) ));但是 app.use(express.session( secret: "secret", store: new MemoryStore(), maxAge: Date.now() + (30 * 86400 * 1000) ));对我也很好。 MemoryStore 仅在 express 应用程序运行期间存储会话。因此,如果您在任何时候重新启动服务器,cookie 将不再链接到内存中的会话,并且 express 将使您的用户再次登录。 也许我误解了它的工作原理,但是......“过期”示例将设置一个相对于应用程序启动时间的过期日期,因此应用程序启动一个月后所有会话将立即过期(包括在此之后创建的任何新会话)?并且 maxAge 示例设置了一个 age ,它是(current-offset-from-epoch + 30 days in millis),距离应用程序启动大约 44 年......他们不应该被包裹在功能还是什么? 为什么在你的例子中设置“maxAge: Date.now() + (30 * 86400 * 1000)”?我的意思是,为什么在开始时使用“Date.now()”这个表达式?根据文档npmjs.com/package/express-session#cookiemaxage,它说“这是通过获取当前服务器时间并将 maxAge 毫秒添加到值以计算 Expires 日期时间来完成的。” downvoted - expires 不建议使用,使用Date.now() 不正确【参考方案3】:

maxAge 表示会话持续多长时间,以毫秒为单位; expires 表示会话何时到期,即:日期对象

var hour = 3600000
req.session.cookie.expires = new Date(Date.now() + hour)

var hour = 3600000
req.session.cookie.maxAge = hour

Documentation

【讨论】:

【参考方案4】:

文档不建议直接设置 cookie.expires。相反,直接设置 cookie.maxAge。

Express session - cookie.expires

【讨论】:

【参考方案5】:
app.use(express.session(
    secret  : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
    store   : new storage( client : conn, cleanup: false ),
    cookie  :  maxAge  : new Date(Date.now() + (60 * 1000 * 30)) 
));

【讨论】:

您混淆了 maxAge 并再次过期。 6岁的答案,仍然不正确:D阅读董的答案:***.com/a/30562724/1905229

以上是关于Node + Express 会话过期?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js刷新session过期时间

如何在 node express 中实现 JWT(JsonWebToken) 注销

Node.js/Express.js 会话管理 cookie 为会话 cookie

Node.js 和 Express 会话处理 - 后退按钮问题

node.js + express.js:使用 mongodb/mongoose 处理会话

Node.js - Express会话数据不会持久化