如何使expressjs中的会话不会过期

时间:2013-02-13 08:03:13

标签: node.js

我使用expressjs框架在nodejs中编写了一个简单的cms。我使用twitter进行身份验证。下面是我的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代码可在此处查看full app.js  我现在遇到的是当我将应用程序闲置几分钟,会话到期时我需要再次登录。我们如何使会话在至少2-3小时不活动时不会超时?

2 个答案:

答案 0 :(得分:8)

调整此代码:

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

将会话的到期时间设置为10分钟。您不需要同时使用maxAgeexpires,一个就足够了(不同之处在于expires使用日期实例而maxAge仅表示expire X milliseconds from now )。

答案 1 :(得分:0)

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

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