Ответ 1
Похоже, что вам не хватает:
app.use(express.cookieParser());
перед вызовом app.use(express.session(...));
.
См. здесь.
Я пытаюсь использовать 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)
Похоже, что вам не хватает:
app.use(express.cookieParser());
перед вызовом app.use(express.session(...));
.
См. здесь.
Сессии не будут работать, если у вас нет этих 3 в этом порядке:
app.use(express.cookieParser());
app.use(express.session());
app.use(app.router);
Я не уверен, что маршрутизатор является обязательным для использования сеансов, но он разбивает их, если он помещается перед ними.
Была та же проблема, однако она была вызвана изменениями в последней версии express.
Теперь вам нужно передать экспресс-сессию в функцию connect-redis export для расширения сеанса. Хранилище:
var express = require('express');
var session = require('express-session')
var RedisStore = require('connect-redis')(session);
В последнее время ситуация изменилась с 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
является правильным.
У меня была та же проблема. Оказалось, что redis просто настроен на другой порт.