节点+快递会话到期?

时间:2012-08-06 10:47:15

标签: javascript node.js session express

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

我打开两台电脑并登录24小时,当我回来时,两人都已退出。

如何修复此问题/实现我正在尝试做的事情? 感谢。

5 个答案:

答案 0 :(得分:17)

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

代码示例:

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) 
    }));

也适合我。

答案 1 :(得分:6)

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

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

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

Documentation

答案 2 :(得分:4)

app.use(express.session({
    secret  : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
    store   : new storage({ client : conn, cleanup: false }),
    cookie  : { maxAge  : new Date(Date.now() + (60 * 1000 * 30)) }
}));

答案 3 :(得分:2)

文档不建议直接设置cookie.expires。而是直接设置cookie.maxAge。

Express session - cookie.expires

答案 4 :(得分:1)

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

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

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

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