Экспресс сеанс хранения и reapInterval - PullRequest
3 голосов
/ 26 сентября 2011

У меня вопрос о памяти хранилища экспресс-сессий с установкой значения reapInterval. У меня есть пример кода, который будет выводить значения из памяти каждые 5 секунд. Если я теперь установил reapinterval 5000, он должен очищать истекший сеанс каждые 5 секунд, верно? Итак, мой пример выглядит так:

/**
 * Module dependencies.
 */

var express = require('express');
var app = module.exports = express.createServer();
var MemStore = require('express/node_modules/connect/lib/middleware/session/memory');
var store = new MemStore({reapInterval: 5000});

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({secret: 'your secret here', store: store, cookie: {maxAge: 30000}}));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

setInterval(function(){
    console.log(new Date());
    console.log(store);
}, 5000);

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
  app.use(express.errorHandler()); 
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
     title: 'Express'
  });
});

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

А теперь проблема в том, что если я снова через 30 секунд снова посещаю страницу, я получаю новый SID, но старый сеанс в memorystore все еще там ... его не нужно проверять каждые 5 секунд и удалять?

Спасибо за помощь!

1 Ответ

1 голос
/ 18 июля 2012

Итак, первая проблема - это недоразумение. reapInterval ничего не делает. MemoryStore очищает куки-файлы в зависимости от времени истечения сеансового куки-файла. Так что в Connects MemoryStore действительно есть ошибка. То, как я это вижу, сломанный поток выглядит следующим образом.

  • Установить срок действия cookie в X.
  • Получить данные сеанса, Х прошел? Нет, хорошо.
  • (срок действия cookie истекает)
  • Получить данные сеанса, сеанс не существует, создать новый.
  • X прошел, но идентификатор сеанса отсутствует, так как срок действия браузера уже истек.

Здесь обсуждается это.

https://github.com/senchalabs/connect/issues/328

И сочная цитата

"я думаю, что короткие сеансы cookie будут испорчены" --visionmedia

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...