node.js - 使用RedisStore有什么方法可以查看当前 session 吗?

标签 node.js session heroku express redis

在意识到 Express session 不太适合之后,我开始使用 Redis 来存储我的用户 session 。

我是这样做的:

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 数据库吗?我希望能够监控是否有用户登录以及他们是哪些用户。此外,我想确保它正确地创建和维护 session 。

谢谢!

最佳答案

你可以使用 SCAN获取 session key 列表,然后在需要提取 session 数据时迭代这些 key 。

例如(未经测试):

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');
});

关于node.js - 使用RedisStore有什么方法可以查看当前 session 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31011951/

相关文章:

javascript - 如何更改 package.json 输出位置

xml - 如何在 Node.js 中转换(简单的)流式 XML?

javascript - 如何在 Windows 7 上使用 NodeJS/PhantomJS/CasperJS

mysql - Flask-SQLAlchemy - 即时连接到多个数据库

php - 如何使用 php 使用 session 和文件 ID 来增加计数

node.js - 无法在 Heroku 中推送一些引用

javascript - Mocha : create and finalize test programmatically

c# - 为什么session返回null?

php - 在 heroku 上使用 pgsql 部署 laravel php 应用程序

javascript - Web进程绑定(bind)$port节点失败