2016-06-19 5 views
1

Я использую Express 4.13.1 с Redis в качестве хранилища сеансов.Экспресс-сеанс с использованием магазина redis не смог создать сеанс

app.use(session({ 
    store: new RedisStore, 
    secret: '...', 
    resave: false, 
    saveUninitialized: true 
})); 

Сначала он работал, но потом он не работал (после обновления node.js). Использование хранилища по умолчанию (память) отлично работает, но с использованием RedisStore сеанс не создается. Это код для создания сессии:

router.post('/admin/login', (req, res, next) => { 
    Auth.compare(...,() => { 
     req.session.authorized = true; 
     req.session.userId = id; 

     console.log(req.session); // It prints well. Session is created 

     res.redirect('/admin/main'); 
    }); 
}); 

в тот момент, сессия была изменена:

Session { 
    cookie: 
    { path: '/', 
    _expires: null, 
    originalMaxAge: null, 
    httpOnly: true }, 
    authorized: true, 
    userId: '...'} 

, но после этого, сессия не была создана:

router.get('/admin/main', (req, res, next) => { 
    console.log(req.session); 
    ... 
}); 

печати сессия:

Session { 
    cookie: 
    { path: '/', 
    _expires: null, 
    originalMaxAge: null, 
    httpOnly: true } 
} 

Я использовал sessio n.save вручную, но это не сработало. Что мне не хватает?

+1

@FurkanO спасибо за исправление моих слов. – modernator

ответ

1

При работе с redis можно проверить несколько пунктов в приложении, чтобы решить проблему, подобную этой. Прежде всего, убедитесь, что браузер получает файл cookie, например, проверяя ресурсы -> файлы cookie в браузере.

  • Проверить дату истечения срока действия и увидеть там идентификатор сеанса.

Во-вторых, проверьте Redis для соответствующего ключа, если ключ существует и истечения ключа из Redis-кли:

  • Все ключи: keys *

  • Значение по ключу : get key (sess:PMlu4s1PYHnSZXBMSoJGLgjNSGXq_s-g is a key for me)

  • Проверить истечение срока действия ключа: ttl key

Там может быть одна из следующих проблем:

  • Можно было настраивать Redis ненадо
  • Можно было настраивать Redis ТТЛ неадекватно, например ваше значение ТТЛ должно быть в секундах, тогда как файл cookie maxAge находится в милисекундах.

Вместо запроса кода server.js, я рекомендую вам выполнить следующие действия, чтобы проверить, все ли в порядке с истечением срока действия или по крайней мере создается сеанс.

+0

Я проверил файлы cookie в своем браузере, и он создал хорошо. И значение Expires/Max-Age - «Session» <- Я не знаю, что это значит. Я использую default expires (в экспресс-док говорит, он делает cookie настойчивости, и я хочу использовать это). Также я использую параметры по умолчанию для магазина redis и никогда не изменялся и не настраивался. – modernator

+0

Я думаю, проблема в вашей конфигурации redis. Вы можете попытаться проверить, доступен ли тот же сеансовый файл в redis из redis-cli. – FurkanO

+0

Я только что проверил redis, и все ключи возвращаются ** (пустой список или набор) **. Я не настроил redis после установки. Почему это происходит? – modernator

Смежные вопросы