Node.js 获取connect redis上现有会话的列表
我必须实现一个功能,如果登录的用户数超过了允许的用户数,那么就不应该允许更多的用户登录。是否有方法获取正在运行/现有会话的列表?以及如何销毁特定会话?任何人都可以提供一个例子,因为我是新的节点。我的部分代码是:Node.js 获取connect redis上现有会话的列表,node.js,session,express,node-redis,Node.js,Session,Express,Node Redis,我必须实现一个功能,如果登录的用户数超过了允许的用户数,那么就不应该允许更多的用户登录。是否有方法获取正在运行/现有会话的列表?以及如何销毁特定会话?任何人都可以提供一个例子,因为我是新的节点。我的部分代码是: express = require('express'), session = require('express-session'), RedisStore = require('connect-redis')(session), bodyParser = require('body-p
express = require('express'),
session = require('express-session'),
RedisStore = require('connect-redis')(session),
bodyParser = require('body-parser');
redisOpts = {
pass: config.REDIS_PASS,
host: config.REDIS_SERVER || null,
port: config.REDIS_PORT || null
},
sessionStore = new RedisStore(redisOpts),
app = express();
app.use(session({
store: sessionStore,
secret: 'XXX',
resave: true,
saveUninitialized: true
}));
编辑
express = require('express'),
session = require('express-session'),
redis = require("redis"),
RedisStore = require('connect-redis')(session),
bodyParser = require('body-parser');
redisOpts = {
pass: config.REDIS_PASS,
host: config.REDIS_SERVER || null,
port: config.REDIS_PORT || null
},
redisClient = redis.createClient(redisOpts.port, redisOpts.host, { auth_pass: redisOpts.pass }),
sessionStore = new RedisStore(redisClient),
app = express();
app.use(session({
store: sessionStore,
secret: 'XXX',
resave: true,
saveUninitialized: true
}));
如果检查会话列表,则在app.js内部登录函数中:
redisClient.keys("sess:*", function(error, keys){
console.log("Number of active sessions: ", keys.length);
console.log(keys);
});
编辑后,在connect-redis.js的这一行中抛出一个错误:
TypeError: this.client.unref is not a function
if (options.unref) this.client.unref();
感谢您的帮助
非常感谢。不过,您需要直接查询redis收藏 由于connect redis在内部使用
redis.createClient()
,因此可以在中传递redis客户端的实例,而不是凭据。比如:
//I've kept your redisOpts for clarity
redisOpts = {
pass: config.REDIS_PASS,
host: config.REDIS_SERVER || null,
port: config.REDIS_PORT || null
},
var redisClient = redis.createClient(redisOpts.port, redisOpts.host, { auth_pass: redisOpts.pass });
现在,像以前一样配置您的redis存储,但传入redis客户端
sessionStore = new RedisStore(redisClient)
您现在可以使用相同的redisClient
查询会话密钥的数量
redisClient.keys("sess:*", function(error, keys){
console.log("Number of active sessions: ", keys.length);
});
我通常为每个会话设置一个名称,如:
var redis_client=redis.createClient();
redis_client.client('setname','tour client');
然后当我想检查它时:
redis_client.multi().client(['list']).exec(函数(错误,结果){
变量对=结果[0]。拆分(“”);
pairs.forEach(函数(pair){
var kv=对分裂('=');
如果(kv[0]=='name'&&kv[1]=='some name looking')
发现=真;
});
如果(找到){
//一些逻辑
}
});
这给出了一个错误:TypeError:This.client.unref不是此行的函数->if(options.unref)This.client.unref();在connect-redis.js中,该抛出的是什么?当我重新启动节点时,在这一行,嗯,这很奇怪,是库抛出了错误。。。。。您是否可以编辑您的问题以显示您的新代码,将redisClient传递到RedisStore
hmm,您安装了哪个版本的redisClient?你是通过npm安装的吗?