节点+快递会话到期?

13 javascript session node.js express

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

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

我如何解决这个/实现我想要做的事情?谢谢.

Vad*_*hev 19

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

代码示例:

app.use(express.session(
  { secret: "secret", store: new MemoryStore(), expires: new Date(Date.now() + (30 * 86400 * 1000)) 
  }));
Run Code Online (Sandbox Code Playgroud)

  app.use(express.session(
    { secret: "secret", store: new MemoryStore(), maxAge: Date.now() + (30 * 86400 * 1000) 
    }));
Run Code Online (Sandbox Code Playgroud)

对我也很好.

  • 为什么在示例中设置“maxAge:Date.now() + (30 * 86400 * 1000)”?我的意思是,为什么在开始时表达“Date.now()”?根据文档 https://www.npmjs.com/package/express-session#cookiemaxage 它说“这是通过获取当前服务器时间并将 maxAge 毫秒添加到值来计算过期日期时间来完成的。” (6认同)
  • downvoted - 不建议使用过期并且使用 `Date.now()` 是不正确的 (4认同)
  • 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)})); 对我也很好. (3认同)
  • 也许我误解了它的工作原理,但是...“ expires”示例将设置相对于应用程序启动时间的有效期,因此在应用程序启动后一个月,所有会话都将立即过期(包括在此之后创建的任何新会话)点)?并且maxAge示例设置了一个_age_,该值是(距当前时间偏移量+ 30天(以毫秒为单位)),距应用程序启动大约有44年的时间……不应该将它们包装在函数中吗? (2认同)

小智 19

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

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

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

app.use(
  session({
    ...,
    cookie: {
      maxAge: 30 * 24 * 60 * 60 * 1000
    }
  })
);
Run Code Online (Sandbox Code Playgroud)


Don*_*ong 9

maxAge表示会话持续的时间,以ms为单位; 到期意味着会话即将到期,即:日期对象

var hour = 3600000
req.session.cookie.expires = new Date(Date.now() + hour)
Run Code Online (Sandbox Code Playgroud)

documentataion


小智 6

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

快速会话 - cookie.expires