我必须实现一个功能,如果登录的用户数量超过允许的用户数,那么就不应该允许更多的用户登录。是否有方法获取运行/现有会话的列表?以及如何摧毁特定的会话?谁能提供一个例子,因为我是新的节点。我的代码之一是:
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);
});在此编辑之后,它会在该行的connec-redis.js中引发一个错误:
TypeError: this.client.unref is not a function
if (options.unref) this.client.unref();任何帮助都是非常感谢的。
在此之前,非常感谢您。
发布于 2015-11-24 09:59:30
不过,您需要直接查询redis集合。
因为connect在内部使用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存储,但是传入redisClient
sessionStore = new RedisStore(redisClient)现在可以使用相同的redisClient查询会话键的数量。
redisClient.keys("sess:*", function(error, keys){
console.log("Number of active sessions: ", keys.length);
});发布于 2015-11-24 10:24:49
我通常为每个会话设置一个名称,如:
var redis_client = redis.createClient();
redis_client.client('setname', 'tour-client');然后当我想检查的时候:
redis_client.multi().client(['list']).exec(function(err, results) {
var pairs = results[0].split(' ');
pairs.forEach(function(pair){
var kv = pair.split('=');
if (kv[0] == 'name' && kv[1] == 'some-name-looking-for')
found = true;
});
if (found) {
// some logic
}
});https://stackoverflow.com/questions/33890173
复制相似问题