Home  >  Article  >  Web Front-end  >  How to manage sessions? Use redis to manage sessions under nodejs express

How to manage sessions? Use redis to manage sessions under nodejs express

零下一度
零下一度Original
2017-04-26 10:48:091591browse

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn