Session ';会议';将express/redis用于会话存储时未定义

Session ';会议';将express/redis用于会话存储时未定义,session,node.js,redis,express,Session,Node.js,Redis,Express,我正在尝试在我的express应用程序中使用redis进行会话 我做了以下工作: var express = require('express'); var RedisStore = require('connect-redis')(express); app.configure('development', function(){ app.use(express.session({ secret: "password",

我正在尝试在我的express应用程序中使用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”

这表示req.session未定义 (我可以从我的配置部分的console.log条目中看到这一点)


我肯定已经让redis运行,并且可以看到我的应用程序最初连接到它(使用redis cli监视器)

看起来您缺少:

app.use(express.cookieParser());
在你的
应用程序之前使用(express.session(…)呼叫


请参阅。

除非按照以下顺序设置以下3个会话,否则会话将不起作用:

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

我不确定路由器是否必须使用会话,但如果它放在会话之前,它会破坏会话。

我也有同样的问题。事实证明,redis只是配置为不同的端口。

也有同样的问题,但这是由最新版本的express中的更改引起的

您现在需要将express session传递给函数connect redis exports以扩展会话。存储:

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

Express 3/Express 4最近发生了变化。 请确认您正在使用版本4

完整的中间件概念改变了。您需要手动安装这些中间件。“快速会话”是4.0中间件之一

我建议你读书

此外,一些用户感到困惑的是,它本身只是被命名为“会话”,但


正确。

我有app.use(app.router);在express.session之前,这似乎打破了它。这个答案很难找到,应该在文档中的某个地方。向上投票!这个答案更完整。你需要做两件事:1)启用cookieParser()和2)移动“app.use(app.router);”倒下。我认为这应该是正确的答案。即使所有3件事情都按正确的顺序进行,req.session仍然未定义,不知道为什么。自版本1.5.0以来,此答案将如何更新?目前,express session是一个单独的模块。根据文档,“cookie解析器中间件不再需要用于此模块的工作”这个问题是在2012年4月17日提出的,因此与版本4无关。对于版本4:我也有同样的问题,但我确实有app.user(cookieParser())这样的工具来帮助我走上正确的道路。我被Heroku更改了我在本地主机上使用的REDIS_URL的事实绊倒了。我可能知道这一点,因为他们自己也提到过:>“REDIS配置变量可能随时发生变化。在Heroku应用程序之外依赖配置变量可能会导致您不得不重新复制该值(如果该值发生变化)。”
npm install express-session