0

应用程序.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 的过期持续时间,是否会有一些必要的设置?

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

4

1 回答 1

0

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

cookie: {
  httpOnly: false,
  maxAge  : sessionExpireTime
}

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

mongoose_connection: mongoose.connection[0]

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

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

于 2013-10-29T07:58:51.450 回答