23

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

我正在使用 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

4 回答 4

71

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

于 2011-04-09T13:20:02.083 回答
4

在过去的几个小时里,我试图为他解决完全相同的问题。

尝试像这样初始化您的服务器:

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

那应该行得通。

于 2011-04-08T20:22:54.143 回答
0

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

在我的情况下,它原来是由跨源请求引起的,我忘记了请求上的 withCredentials 标头。

因此,例如在我的客户端 Angular 应用程序中,我需要这样做:

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

并在表达这个:

res.header('Access-Control-Allow-Credentials', true);
于 2014-03-10T22:53:58.257 回答
0

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

sessionSecret: "something other than an empty string",

于 2014-07-14T22:36:48.263 回答