如何在express,couchDB和node.js中使用会话

时间:2011-04-08 18:09:21

标签: javascript session node.js express

所以我基本上想要使用会话来存储用户名并检查用户是否登录。如果没有,页面将重定向到登录页面。

我正在使用Node.js,express和couchDB。

以下是我到目前为止设置会话的方式

var MemoryStore = require('connect').session.MemoryStore;
app.use(express.cookieParser());
app.use(express.session({ 
    secret: "keyboard cat", 
    store: new MemoryStore({ 
        reapInterval: 60000 * 10
    })
}));

要在会话中存储内容,我使用以下代码吗?

req.session = {user:name);

因此会话变量似乎可以在我的登录页面上运行。我成功地将用户名存储到会话中但是,当我尝试访问另一个页面上的会话变量时,它会给我错误

Cannot read property 'user' of undefined
我正在做的就是:

if (req.session.user){

为什么会发生这种错误?会话不是整个应用程序的全局?或者我在这里完全错过了一些东西。

提前致谢!

4 个答案:

答案 0 :(得分:71)

如果您在设置Cookie和会话处理的行之前执行app.use(app.router),请尝试将其移至其后。这为我解决了同样的问题。

答案 1 :(得分:4)

我过去几个小时试图解决完全相同的问题。

尝试初始化您的服务器:

var app = express.createServer(
express.cookieParser(),
express.session({ secret: "crazysecretstuff"})
  );

这应该有效。

答案 2 :(得分:0)

我遇到了同样的问题,即我知道设置好的会话变量未定义。

在我的情况下,结果是由交叉原始请求引起的,我忘记了请求中的withCredentials标题。

所以例如在我的客户端Angular app我需要这样做:

var config = { withCredentials: true };
return $http.get(appConfig.apiUrl + '/orders', config);

并在Express中:

res.header('Access-Control-Allow-Credentials', true);

答案 3 :(得分:0)

配置中的sessionSecret(config.json?)应该是非空的:

sessionSecret: "something other than an empty string",