Maison  >  Article  >  interface Web  >  Comment gérer les séances ? Utilisez Redis pour gérer les sessions sous nodejs express

Comment gérer les séances ? Utilisez Redis pour gérer les sessions sous nodejs express

零下一度
零下一度original
2017-04-26 10:48:091579parcourir

Cet article présente principalement l'explication détaillée de l'utilisation de redis pour gérer les sessions sous nodejs express. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.

Principe de mise en œuvre de la session

Il existe de nombreuses façons de mettre en œuvre l'authentification des demandes. L'une des méthodes largement acceptées consiste à utiliser l'ID de session généré côté serveur combiné avec le. Implémentation des cookies du navigateur La gestion des sessions comprend généralement les quatre étapes suivantes :

1. Générer l'ID de session côté serveur

2. Stocker l'ID de session côté serveur et client.

3. Extrayez l'ID de session de l'en-tête HTTP

4 Obtenez les informations d'identité du demandeur à partir du hachage côté serveur en fonction de l'ID de session

<.>

Implémentation de la gestion de session à l'aide d'Express et Redis

var session = require(&#39;express-session&#39;);
var RedisStrore = require(&#39;connect-redis&#39;)(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 : &#39;Asecret123-&#39;,
  resave : true,
  rolling:true,
  saveUninitialized : false,
  cookie : config.cookie,
  store : new RedisStrore(config.sessionStore)
}));

Pile d'implémentationCode d'appel de session express après instanciation (github.com/expressjs/ session)

if (!req.sessionID) {
  debug(&#39;no SID sent, generating session&#39;);
 generate();
 next();
 return;
}
générer un appel de méthode (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 === &#39;auto&#39;) {
   req.session.cookie.secure = issecure(req, trustProxy);
  }
 };
Appeler store.set(sid, session, callback)(github.com/expressjs) lorsque RedisStore est instancié /session)

store.set appelle RedisStore.prototype.set(github.com/tj/connect-redis), où la clé de hachage du siège utilise le préfixe + sessonId et la valeur par défaut du le préfixe est 'sess', plusieurs Lorsque les applications partagent ou non le même service de session Redis, assurez-vous de définir le préfixe

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(&#39;EX&#39;, ttl);
   debug(&#39;SET "%s" %s ttl:%s&#39;, sid, jsess, ttl);
  } else {
   debug(&#39;SET "%s" %s&#39;, sid, jsess);
  }
 store.client.set(args, function (er) {
   if (er) return fn(er);
   debug(&#39;SET complete&#39;);
   fn.apply(null, arguments);
  });
 };
store.client.set est appelé (github.com/NodeRedis/node_redis )

Enfin, appelez la méthode native redis.hset

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn