如何从Redis保存和检索会话

我正在尝试将Redis会话集成到Node.js中编写的身份validation系统中。

我已经能够成功地设置Redis服务器, connect-redis和Express服务器。

这是我的设置(只是重要的一点):

 var express = require("express"); var RedisStore = require("connect-redis")(express); var redis = require("redis").createClient(); app.use(express.cookieParser()); app.use(express.session({ secret: "thisismysecretkey", store: new RedisStore({ host: 'localhost', port: 6379, client: redis }) })); 

现在…我如何实际创build,阅读和销毁会话? 我已经阅读了大量关于如何在这里设置connect-redis和许多问题的文章,但我发誓每一个只停留在configuration上,并没有解释如何实际使用它…

我知道,这可能是非常简单的,但请不要downvote,只是解释:)。

       

网上收集的解决方案 "如何从Redis保存和检索会话"

这应该是所有这一切。 您可以通过req.session访问路由处理程序中的会话。 会话是自动创build,保存和销毁的。

如果您需要为用户手动创build新会话,请调用req.session.regenerate()

如果您需要手动保存,可以调用req.session.save()

如果你需要手动销毁它,你可以调用req.session.destroy()

请参阅Connect文档以获取完整的方法和属性列表。

考虑这个代码。

 var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.set('views', __dirname + '/views'); app.engine('html', require('ejs').renderFile); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.get('/',function(req,res){ // create new session object. if(req.session.key) { // if email key is sent redirect. res.redirect('/admin'); } else { // else go to home page. res.render('index.html'); } }); app.post('/login',function(req,res){ // when user login set the key to redis. req.session.key=req.body.email; res.end('done'); }); app.get('/logout',function(req,res){ req.session.destroy(function(err){ if(err){ console.log(err); } else { res.redirect('/'); } }); }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); }); 

所以你需要安装connect-redis并将你的express-session实例传递给它。

然后在中间件中用这样的服务器细节初始化redisStore。

 app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); 

我把ttl到260,可以增加。 TTL达到极限后,会自动删除Redis键。

在路由器中,您可以使用req.sessionvariables来设置,编辑或破坏会话。

还有一件事…

如果您需要自定义Cookie,即不像您的Redis存储中的cookie一样,则可以使用cookieparsing器来设置cookie的秘密。

希望能帮助到你。

链接: https : //codeforgeek.com/2015/07/using-redis-to-handle-session-in-node-js/