【问题标题】:How can I get session data from RedisStore (connect-redis) using SessionID?如何使用 SessionID 从 RedisStore (connect-redis) 获取会话数据?
【发布时间】:2016-03-10 03:57:37
【问题描述】:

所以下面的 sn-p 显示了如何设置 RedisStore 并从传入的 GET 请求中获取 sessionID。但是,sessionStore.get( req.cookies['connect.sid'] ) 的计算结果为 undefined

有人可以指出我做错了什么吗?从req.cookies['connect.sid'] 返回的示例sessionID 如下所示:

s:_8pvC4Zju4GjMOvN6Y4ej8SRVYvopn8C.ctuA/+pQnZt96bLgOW1xizHOLI2nBuH4vzO9Agm26Lk
var expressSession = require('express-session'); 
var RedisStore = require('connect-redis')(expressSession);

var sessionStore = new RedisStore({host: '127.0.0.1', port: 6379});
app.use(expressSession({store: sessionStore,
                        secret: 'xxxx' }));

app.get("/*", function(req, res, next) { 
  if(typeof req.cookies['connect.sid'] !== 'undefined') {
    console.log('sessionID: ', req.cookies['connect.sid']);
    console.log( sessionStore.get(req.cookies['connect.sid'] ));
  }
  next();
});

【问题讨论】:

  • 为什么不使用req.session?除非您想从当前请求中获取用户以外的其他人的会话数据?
  • 我正在尝试从 sessionStore 获取它以使用 socket.io 对用户进行身份验证。

标签: node.js session express redis socket.io


【解决方案1】:

sessionStore.get 是一个异步方法,你需要给这个方法传递一个回调,像这样:

sessionStore.get(req.cookies['connect.sid'], function (err, session) {
  console.log(session);
})

观看有关express-session 的文档。

【讨论】:

  • 尝试将会话数据转换为 json 以显示为键值对。例如:var data = JSON.parse(session);控制台.log(数据["cookie"]);否则你会得到字符串数组..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多