Home > Article > Web Front-end > How to manage sessions? Use redis to manage sessions under nodejs express
This article mainly introduces the detailed explanation of using redis to manage sessions under nodejs express. It has certain reference value. Interested friends can refer to it.
Session Implementation Principle
There are many ways to implement request authentication. One of the widely accepted methods is to use the Session ID generated on the server side combined with the browser's Cookie implementation. Session management generally includes the following four steps:
1. Server-side generation of Session ID
2. Server-side and client-side storage of Session ID
3. Extract the Session ID from the HTTP Header
4. Obtain the requester’s identity information from the server-side Hash based on the Session ID
Implementation of Session management using Express and Redis
var session = require('express-session'); var RedisStrore = require('connect-redis')(session); var config={ "cookie" : { "maxAge" : 1800000 }, "sessionStore" : { "host" : "192.168.0.13", "port" : "6379", "pass" : "123456", "db" : 1, "ttl" : 1800, "logErrors" : true } app.use(session({ name : "sid", secret : 'Asecret123-', resave : true, rolling:true, saveUninitialized : false, cookie : config.cookie, store : new RedisStrore(config.sessionStore) }));
Implementation stack
express-session calling code after instantiation (github.com/expressjs/session)
if (!req.sessionID) { debug('no SID sent, generating session'); generate(); next(); return; }
generate method call (github.com/expressjs/session)
store.generate = function(req){ req.sessionID = generateId(req); req.session = new Session(req); req.session.cookie = new Cookie(cookieOptions); if (cookieOptions.secure === 'auto') { req.session.cookie.secure = issecure(req, trustProxy); } };
Call store.set(sid, session, callback)(github.com/expressjs/session)
when RedisStore is instantiated.store.set calls RedisStore.prototype.set (github.com/tj/connect-redis), where the seat hashkey uses the prefix + sessonId. The default value of the prefix is 'sess'. Multiple applications share and do not share the same When serving a redis session, be sure to set the prefix
RedisStore.prototype.set = function (sid, sess, fn) { var store = this; var args = [store.prefix + sid]; if (!fn) fn = noop; try { var jsess = store.serializer.stringify(sess); } catch (er) { return fn(er); } args.push(jsess); if (!store.disableTTL) { var ttl = getTTL(store, sess); args.push('EX', ttl); debug('SET "%s" %s ttl:%s', sid, jsess, ttl); } else { debug('SET "%s" %s', sid, jsess); } store.client.set(args, function (er) { if (er) return fn(er); debug('SET complete'); fn.apply(null, arguments); }); };
store.client.set is called (github.com/NodeRedis/node_redis)
Finally call the native redis.hset method
The above is the detailed content of How to manage sessions? Use redis to manage sessions under nodejs express. For more information, please follow other related articles on the PHP Chinese website!