我有一个基于Express的应用程序和一个登录表单。我需要使会话持续一个月,所以我将maxAge设置为一个月的毫秒数。
我把两台电脑开着并登录了24小时,当我回来时,两台电脑都已注销。
我该如何解决这个问题/实现我想要的功能?谢谢。
我把两台电脑开着并登录了24小时,当我回来时,两台电脑都已注销。
我该如何解决这个问题/实现我想要的功能?谢谢。
@Vadim Baryshev的被接受的答案在最近的express-session实现中存在问题。当您的应用程序启动时,您创建会话实现并设置最大年龄。至于使用expires的答案,这是不推荐的,请坚持使用maxAge。
这意味着像写出的maxAge示例一样,每个会话都将在服务器启动后一个月过期,并且将立即过期未来创建的每个会话。在服务器重新启动之前,将没有任何有效的会话。
只需将毫秒数传递到maxAge属性,而不是传递日期对象,就像这样:
app.use(
session({
...,
cookie: {
maxAge: 30 * 24 * 60 * 60 * 1000
}
})
);
maxAge
表示会话持续的时间,以毫秒为单位;
expires
表示会话何时过期,即一个日期对象。
var hour = 3600000
req.session.cookie.expires = new Date(Date.now() + hour)
或者var hour = 3600000
req.session.cookie.maxAge = hour
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 : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
store : new storage({ client : conn, cleanup: false }),
cookie : { maxAge : new Date(Date.now() + (60 * 1000 * 30)) }
}));
MemoryStore
只在 express 应用程序运行期间存储会话。因此,如果您在任何时候重新启动服务器,则 cookie 不再链接到内存中的会话,并且 express 将要求您的用户再次登录。 - rdreyDate.now()
也是不正确的。这与IT有关。 - Sgnl