5

我使用 expressjs 框架在 nodejs 中编写了一个简单的 cms。我使用passportjs 使用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 小时不活动时不会超时?

4

2 回答 2

9

调整此代码:

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

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

于 2013-02-13T08:21:02.010 回答
0

对于RedisStore,您可以设置disableTTLtrue. 密钥将保留在 redis 中,直到被其他方式驱逐。

var sessionStore = new RedisStore({client: rClinet, disableTTL: true})
于 2016-02-01T09:54:51.600 回答