Узел.JS-сессия не сохраняется через res.перенаправление()
Я (почти) успешно использую узел.js с Express и Redis для обработки сеансов.
проблема в том, что сеанс не сохраняется, когда я использую res.redirect().
вот как я это вижу:
req.session.username = username.toString();
console.log(req.session);
res.redirect('/home');
консоль.log () печать:
{ lastAccess: 1322579131762,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 },
  username: 'admin' }
Итак, вот следующий код :
app.get('/home', [app.requireLogin], function(req, res, next) {
// Not showing the rest as it's not even getting there
// Instead, here is what's interesting
app.requireLogin = function(req, res, next) {
  console.log(req.session);
эта консоль.log () распечатывает это :
{ lastAccess: 1322579131775,
  cookie:
   { path: '/',
     httpOnly: true,
     _expires: Tue, 29 Nov 2011 15:06:31 GMT,
     originalMaxAge: 60000 } }
очевидно, что объект "имя пользователя" исчез. Сессия не сохранил его,а просто перестроил новый.
как я могу решить это? Не стесняйтесь, если вам нужна какая-либо информация.
вот код, где я установил управление сеансом:
app.configure(function() {
  // Defines the view folder and engine used.
  this.set('views', path.join(__dirname, 'views'));
  this.set('view engine', 'ejs');
  // Allow parsing form data
  this.use(express.bodyParser());
  // Allow parsing cookies from request headers
  this.use(express.cookieParser());
  // Session management
  this.use(express.session({
    // Private crypting key
    secret: 'keyboard cat',
    store: new RedisStore,
    cookie: {
      maxAge: 60000
    }
  }));
  this.use(app.router);
});
вот весь проект (я имею в виду его части), по сути:https://gist.github.com/c8ed0f2cc858942c4c3b (игнорировать свойства отображаемых представлений)
5 ответов
хорошо, я нашел решение. Проблема в том, что время в maxAge добавлена к текущей дате. Таким образом, на стороне браузера срок действия файла cookie истекал в указанное время GMT.
проблема была в следующем : я использую виртуальную машину для тестирования узла.JS и, вы знаете... иногда вы приостанавливаете свою машину.
вы пробовали с разных браузеров ? Вы сохраняете один и тот же идентификатор сеанса между перенаправлениями страниц ?
вы могли бы добавить req.session.cookie.expires = false; перед перенаправлением...
ваш код выглядит довольно солидно, но есть причина, по которой вы используете клиент.конец()? Он принудительно закрывает соединение redis и не чист. Я не думаю, что вам это нужно вообще:
https://github.com/mranney/node_redis/issues/74
Я не уверен в базовой архитектуре для connect-redis, но мне интересно, звонит ли клиент.конечный сброс сессий. Что будет, если вы их вытащите?
у меня была аналогичная проблема в том, что я устанавливал что-то на сессии, которая не сохранялась за пределами app.get() Он был установлен в.
моя проблема оказалась в том, что я был не делать res.redirect() в конце app.get().  Похоже, я устанавливал что-то на объекте запроса, а затем позволял ему собирать мусор.
добавил res.redirect( '/nextmethod' ) и данные сохраняются просто отлично.
конечно, вам нужно каким-то образом сохранить этот сеанс, это может сработать.
req.session.regenerate(function(){
    req.session.username = username.toString();
    res.redirect('/home');
});
