如何保持NodeJS Passport会话

时间:2013-12-04 22:35:41

标签: node.js express passport.js

我们使用Node + Express + Passport进行身份验证,并将会话信息保存到Redis。我在会话cookie上设置了maxAge,在一小时内超时。这一切似乎都运行正常,但问题是,无论用户的活动如何,会话cookie都将在一小时后到期。

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

4 个答案:

答案 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;

这是connect session documentation

答案 3 :(得分:0)

试试这段代码:

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