Подтвердить что ты не робот

"session" - undefined при использовании express/redis для хранилища сеансов

Я пытаюсь использовать redis для сеансов в своем экспресс-приложении.

Я делаю следующее:

var express = require('express');
var RedisStore = require('connect-redis')(express);

app.configure('development', function(){     
    app.use(express.session({ secret: "password", 
                            store: new RedisStore({
                                          host: "127.0.0.1",
                                          port: "6379",
                                          db: "mydb"
                                        })  
          }));

Позже, в моем приложении, если я сделаю что-то вроде:

var whatever = req.session.someProperty;

Я получаю:

Невозможно прочитать свойство someProperty из undefined

Это означает, что req.session - undefined (Я вижу это из записи console.log в моей секции конфигурации)

У меня определенно работает redis, и я вижу, что мое приложение сначала подключается к нему (используя монитор redis-cli)

4b9b3361

Ответ 1

Похоже, что вам не хватает:

app.use(express.cookieParser());

перед вызовом app.use(express.session(...));.

См. здесь.

Ответ 2

Сессии не будут работать, если у вас нет этих 3 в этом порядке:

app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);

Я не уверен, что маршрутизатор является обязательным для использования сеансов, но он разбивает их, если он помещается перед ними.

Ответ 3

Была та же проблема, однако она была вызвана изменениями в последней версии express.

Теперь вам нужно передать экспресс-сессию в функцию connect-redis export для расширения сеанса. Хранилище:

var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);

Ответ 4

В последнее время ситуация изменилась с Express 3/Express 4. Подтвердите, что используете версию 4.

Изменена концепция промежуточного программного обеспечения. Вам необходимо установить эти посредники вручную. "экспресс-сессия" является одним из 4.0 промежуточных продуктов.

Я рекомендую прочитать

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0 и https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

Кроме того, некоторые пользователи были смущены тем, что github repo сам называется просто "session", но

npm install express-session

является правильным.

Ответ 5

У меня была та же проблема. Оказалось, что redis просто настроен на другой порт.