在意识到 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/