为什么无法在connect-mongo + express.js中更改会话的到期时间设置?

时间:2013-10-29 04:46:39

标签: node.js mongodb session express

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的过期时间?

谢谢,我收到了你的关系,不熟悉我的英语...

1 个答案:

答案 0 :(得分:0)

maxAge属性应该是绝对毫秒数,而不是日期:

cookie: {
  httpOnly: false,
  maxAge  : sessionExpireTime
}

您的代码还存在其他一些问题:

mongoose_connection: mongoose.connection[0]

那应该是mongoose.connections[0](或mongoose.connection,这是相同的。)

clear_interval属性似乎不存在于({至少当前版本的)connect-mongo中。会话到期的方式是使用MongoDB的ttl功能(每分钟运行一次)。