2013-10-09 89 views
3

我使用connect-mongo的express.session来存储用户会话。 我从现在开始将cookie maxAge设置为2周,但我想要的是,如果用户在这两周内处于活动状态,则会话将延长至另外两周,以便当他在两周内不活动时,他的会话将被删除cookie和mongo中的会话)。 但问题是,当他访问一个页面时,会话在MongoDB中得到更新,但该cookie将在2周后过期,并且不会更改它的'过期'。 这是我的代码:Express.js和connect-mongo会话持续时间

app.use(express.session({ 
    secret: 'superSecretKey', 
    cookie: {maxAge: 3600000*24*14}, 
    store: new MongoStore({ 
    mongoose_connection: mongoose.connections[0], 
    db: 'myDb' 
    }) 
})); 

我如何能实现我想要什么? 谢谢!

+1

请参阅[此答案](http://stackoverflow.com/a/14529888/893780)如何实现这一目标。除此之外,'maxAge'应该设置为将来会话过期的毫秒数,而不是日期(这就是expires的意思)。所以使用这个:'maxAge:3600000 * 24 * 14'来设置过期到两周。 – robertklep

+0

谢谢!我也在https://github.com/senchalabs/connect/issues/670上找到了这个。是的,我总是混合过期和maxAge,我编辑了这个问题,并发布了一个答案 – Ivan

回答

2

我终于解开了它,你必须使用一个中间件在会话中更新的任何数据,该cookie被重新发送,就像这样:

app.use(function(req, res, next) { 
    req.session._garbage = Date(); 
    req.session.touch(); 
    next(); 
}); 

这样MAXAGE将在cookie的同时更新和在会话中向应用程序发送每个请求。

+0

我想做一个类似的事情,但说2个小时。我是否只需在原始问题中设置'maxAge',然后将这个'app.use'放置在配置中? – avrono

+0

req.session.regenerate(回调)不适合你? – Leonardo