我们使用Node + Express + Passport进行身份验证,并将会话信息保存到Redis。我在会话cookie上设置了maxAge,在一小时内超时。这一切似乎都运行正常,但问题是,无论用户的活动如何,会话cookie都将在一小时后到期。
有没有办法可以手动刷新/保持会话cookie?
答案 0 :(得分:6)
您可能希望为会话使用“滚动”选项。这“强制在每个响应上设置cookie”并“重置过期日期”。您希望将滚动设置为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。
答案 1 :(得分:5)
是的,你可以! 如果cookie在请求中未更改,则不会重新发送给浏览器,您可以在cookie下检查开发人员工具以验证。因此,包括我自己喜欢做的一些事情就是根据请求更改cookie,其中存在应该扩展会话的用户活动。如下所示:
req.session.lastAccess = new Date().getTime();
我见过但我遇到麻烦的另一件事是使用Session#touch:
req.session.touch()
答案 2 :(得分:0)
是的,您可以在用户登录后手动重置每个cookie的maxAge:
req.session.cookie.maxAge = 60 * 60 * 1000;
答案 3 :(得分:0)
试试这段代码:
app.use(session({ secret: 'Category', cookie: { maxAge: 6000000 }, resave: true, saveUninitialized: false}));