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 - 从 Node js 回调中的列表中获取值

ajax - promisified mongoose/mongodb save 没有返回成功给ajax 调用?

java - Tomcat Web 应用程序 - 将对象存储为用户定义的对象或简单的 ID 以通过服务器重新启动来保持用户 session ?

ruby-on-rails - 将rails应用程序推送到heroku

javascript - 控制台中的 Mapbox 生产错误。 "Uncaught ReferenceError: y is not defined"

python - Heroku 工作人员不记录或打印

node.js - npm sudo 全局安装 & unsafe-perm

node.js - 如何在 Nestjs 中创建 mongodb 连接提供程序

PHP 当 session 超时时,它会重定向整个页面而不是通过 ajax 加载的页面

ASP.NET MVC-有没有一种方法可以模拟ViewState?