如何保持活动的NodeJS护照会话

我们是Node + Express + Passport进行身份validation,并将会话信息保存到Redis。 我在session cookie上设置了maxAge,在一个小时内超时。 这一切似乎工作正常,但问题是,会话Cookie将在一个小时内过期,无论用户的活动。

有没有办法手动刷新/保持会话cookie?

您可能需要为会话使用“滚动”选项。 这“强制设置每个响应的cookie”和“重置到期date”。 你想将滚动设置为true。

另外要注意“重新保存”选项。 即使在未修改的情况下也会强制保存会话…“您可能也希望将该选项设置为true。 请注意,即使此选项的默认值为true,也应该明确设置该值。 依靠此选项的默认值,而不是显式设置,现在已被弃用。

尝试像这样:

app.use( session( { secret: 'keyboard cat', cookie: { maxAge: 60000 }, rolling: true, resave: true, saveUninitialized: false } ) ); 

这里是文档。 查看“选项”和“options.resave”: https : //github.com/expressjs/session 。

是的你可以! 如果cookie在请求中没有改变,那么它不会被重新发送给浏览器,您可以通过cookies来检查开发者工具来validation。 所以,包括我自己喜欢做的​​是,如果有用户活动应该扩展会话的话,就可以根据请求更改Cookie。 像下面这样:

req.session.lastAccess = new Date().getTime();

我见过的另一件事,但我遇到了麻烦是使用Session#touch :

req.session.touch()

是的,您可以在用户login后手动重置每个cookie的maxAge:

 req.session.cookie.maxAge = 60 * 60 * 1000; 

这是connect会话文档 。

试试这个代码:

app.use(session({ secret: 'Category', cookie: { maxAge: 6000000 }, resave: true, saveUninitialized: false}));