我使用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检索它。 请帮我。谢谢!