Maison > interface Web > js tutoriel > le corps du texte

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

零下一度
Libérer: 2017-04-26 10:48:09
original
1582 Les gens l'ont consulté

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)
}));
Copier après la connexion

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;
}
Copier après la connexion
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);
  }
 };
Copier après la connexion
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);
  });
 };
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal