app.js
app.use(express.cookieParser('your secret here'));
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sample);
var MongoStore = require('connect-mongo')(express);
var sessionExpireTime = 10000000; // 10000 sec
var sessionStore = new MongoStore({
mongoose_connection: mongoose.connection[0],
db: config.db.name,
clear_interval: sessionExpireTime / 1000 // second
});
app.use(express.session({
secret: 'your secret here',
store: sessionStore,
cookie: {
httpOnly: false,
maxAge: new Date(Date.now() + sessionExpireTime) // millisecond
}
}));
app.get('/', function(req, res) {
if (req.session.user) {
res.render('index', {title: 'Welcome!'});
} else {
res.redirect('/login');
}
});
app.get('/login', function(req, res) {
res.render('login', {title: 'login'});
});
app.get('/auth', function(req, res) {
req.session.user = {name: 'John'};
res.redirect('/');
});
当呼叫“/ login”然后重定向到“/”页面。 以及在MongoDB集合的“会话”中创建的文档。
但是req.session.user在10秒后从req.session中被销毁。 重新加载页面时,它将返回登录屏幕。
我知道监视connect-mongo的clear_interval的时间间隔未使cookie过期。 是否有必要的设置来改变req.session.user的过期时间?
谢谢,我收到了你的关系,不熟悉我的英语...
答案 0 :(得分:0)
maxAge
属性应该是绝对毫秒数,而不是日期:
cookie: {
httpOnly: false,
maxAge : sessionExpireTime
}
您的代码还存在其他一些问题:
mongoose_connection: mongoose.connection[0]
那应该是mongoose.connections[0]
(或mongoose.connection
,这是相同的。)
clear_interval
属性似乎不存在于({至少当前版本的)connect-mongo
中。会话到期的方式是使用MongoDB的ttl
功能(每分钟运行一次)。