2015-06-23 49 views
1

在意識到Express會話不適合用於會議後,我開始使用Redis來存儲用戶會話。有使用RedisStore時,有什麼方法可以查看當前會話嗎?

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

我的問題是,是什麼辦法讓我窺視到thge的Redis數據庫在運行時:

我上來是這樣嗎?我希望能夠監視是否有用戶登錄以及他們是哪些用戶。另外我想確保它正確地創建和維護會話。

謝謝!

回答

1

您可以使用SCAN來獲取會話密鑰列表,然後遍歷這些密鑰,如果您需要拉入會話數據。

例如(未經測試):

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

你在哪裏找到[該文檔]'scan'(https://www.npmjs.com/package/redis)? – CodyBugstein

+0

顯然掃描不存在 – CodyBugstein

+0

它[存在](https://github.com/mranney/node_redis/blob/ef1a90642d509ee2724d2b2dd449e041da0210f3/lib/commands.js#L159),它只是沒有記錄。我剛剛從npm安裝'redis',函數就在客戶端對象上。 – mscdex

相關問題