我使用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小时不活动时不会超时?
答案 0 :(得分:8)
调整此代码:
cookie: {
expires: new Date(Date.now() + 60 * 10000),
maxAge: 60*10000
}
将会话的到期时间设置为10分钟。您不需要同时使用maxAge
或expires
,一个就足够了(不同之处在于expires
使用日期实例而maxAge
仅表示expire X milliseconds from now
)。
答案 1 :(得分:0)
对于RedisStore,您可以将disableTTL
设置为true
。钥匙将保留在redis中,直到被其他方式驱逐。
var sessionStore = new RedisStore({client: rClinet, disableTTL: true})