使用Redis作为Node js中的会话存储以及如何从中获取值?

时间:2013-12-27 15:42:14

标签: node.js session express redis

我使用Redis在我的nodejs服务器中存储会话。这是我的代码:

var express = require('express');
var http = require('http');
var connect = require("connect");
var path = require('path');
var RedisStore = require("connect-redis")(express);

var redis = require("redis").createClient();

var app = express();

app.set('port', 8888);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());


app.use(express.session({secret: 'blues',
    cookie: { secure: true },
    store: new RedisStore({
        host: 'localhost',
        port: 6379,
        client: redis })
}));

app.use(express.static(path.join(__dirname, 'public')));
app.engine('html', require('ejs').renderFile);

app.get('/login', function(req,res){
    res.render('login.html', {title: 'Login'});
});

var server = http.createServer(app).listen(app.get('port'), function(){
    console.log('Express server listening on port ' + app.get('port'));
});

当我运行服务器并访问网址http://localhost:8888/login,然后回来检查Redis服务器,我发现在那里保存了3个会话,就像这样

127.0.0.1:6379> keys *
1) "sess:DGtMAO3pRPExzPjFS_B07bXP"
2) "sess:bzPTRrlXXe1DhzNze0JdZswt"
3) "sess:-RM8kkNtJ0jj3nhuYmiuw0f6"

这是什么意思?为什么3个会话(我用FLUSHDB命令仔细检查)?

编辑:好的,我有一些测试,结果发现其他两个会话来自login.html中的css和js文件。但有些事情我不明白,当我按F5时,3个新会话存储在Redis中。这是为什么?会话在到期之前是否保持不变?

另一个问题是,使用上面的代码,如何检索Redis中保存的会话?我用过这个:

redis.get('"sess:' + req.session.id + '"', function(err, result){
    console.log("Get session: " + util.inspect(result,{ showHidden: true, depth: null }));
    });

它返回null,虽然我可以在Redis服务器中使用相同的req.session.id检索它。 请帮我。谢谢!

0 个答案:

没有答案