19

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

我让两台电脑开机并登录了 24 小时,当我回来时,两台电脑都被注销了。

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

4

5 回答 5

22

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

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

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

app.use(
  session({
    ...,
    cookie: {
      maxAge: 30 * 24 * 60 * 60 * 1000
    }
  })
);
于 2018-01-14T20:42:39.543 回答
14

您可以使用 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) 
    }));

对我也很好。

于 2012-08-06T11:28:24.933 回答
14

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

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

或者

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

文档

于 2015-05-31T21:09:15.730 回答
6

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

快速会话 - cookie.expires

于 2017-09-26T21:04:20.197 回答
-3
app.use(express.session({
    secret  : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
    store   : new storage({ client : conn, cleanup: false }),
    cookie  : { maxAge  : new Date(Date.now() + (60 * 1000 * 30)) }
}));
于 2013-10-15T21:01:15.917 回答