使用RedisStore时有什么方法可以查看当前会话吗?

时间:2015-06-23 19:37:37

标签: node.js session heroku express redis

在意识到Express会话不是很好之后,我开始使用Redis来存储我的用户会话。

我这样做:

var session     = require('express-session');
if (process.env.REDISTOGO_URL) {
    var rtg   = require("url").parse(process.env.REDISTOGO_URL);
    var redis = require("redis").createClient(rtg.port, rtg.hostname);
    redis.auth(rtg.auth.split(":")[1]);
} else {
    var redis = require("redis").createClient();
}
var RedisStore  = require('connect-redis')(session);

var redisOptions = {client: redis};
app.use(session({
    store: new RedisStore(redisOptions),
    secret: 'honkydory',
    name: 'honk'
}));

我的问题是,有没有办法让我在运行时查看Redis数据库?我希望能够监控是否有用户登录以及他们是哪些用户。另外,我想确保它正确地创建和维护会话。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用SCAN获取会话密钥列表,然后在需要提取会话数据时迭代这些密钥。

例如(未经测试):

function getSessions(cb) {
  var keys = [];
  var cursor = 0;
  (function next(err, reply) {
    if (err) return cb(err);
    if (reply) {
      cursor = reply[0];
      if (reply[1].length > 0)
        keys = keys.concat(reply[1]);
      if (cursor == 0)
        return cb(null, keys);
    }
    redis.scan(cursor, 'match sess:*', next);
  })();
}

// ...

getSessions(function(err, keys) {
  if (err) throw err;
  if (keys.length) {
    redis.mget(keys, function(err, sessionDatas) {
      if (err) throw err;
      // keys[0] matches with sessionDatas[0], etc.
    });
  } else
    console.log('No sessions');
});