如何保持expressjs会话不会过期

我使用expressjs框架在nodejs中编写了一个简单的cms。 我使用twitter使用passportjs进行身份validation。 下面是我的app.configure:

app.configure(function(){ //views app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); //parse request bodies app.use(express.bodyParser()); app.use(express.methodOverride()); // session support app.use(express.cookieParser(cfg.cookie_secret)); app.use(express.session({ key : 'whynode', store : sessionStore, cookie: { expires: new Date(Date.now() + 60 * 10000), maxAge: 60*10000 } })); app.use(passport.initialize()); app.use(passport.session()); //pass user data app.use(function(req, res, next) { res.locals.req_path = req.path; res.locals.user = req.user || false; next(); }); //get routers app.use(app.router); //serve asset files app.use('/assets', express.static(__dirname + '/public')); }); 

我使用redis进行会话存储。 完整的app.js代码可以在这里查看完整的app.js现在我正在经历的是,当我离开应用程序未使用几分钟,会话过期,我需要再次login。 我们如何使会话在至less2-3小时的不活动状态下不超时?

调整这个代码:

 cookie: { expires: new Date(Date.now() + 60 * 10000), maxAge: 60*10000 } 

这将会话的到期时间设置为10分钟。 你不需要同时使用maxAgeexpiresmaxAge一个就足够了(不同之处在于expires使用Date实例, maxAge只是expire X milliseconds from now )。

对于RedisStore,您可以将disableTTL设置为true 。 钥匙将留在redis直到被驱逐其他手段。

 var sessionStore = new RedisStore({client: rClinet, disableTTL: true})