Heim >Web-Frontend >js-Tutorial >Wie verwalte ich Sitzungen? Verwenden Sie Redis, um Sitzungen unter NodeJS Express zu verwalten

Wie verwalte ich Sitzungen? Verwenden Sie Redis, um Sitzungen unter NodeJS Express zu verwalten

零下一度
零下一度Original
2017-04-26 10:48:091618Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Redis zum Verwalten von Sitzungen unter NodeJS Express vorgestellt. Interessierte Freunde können darauf verweisen.

Prinzip der Sitzungsimplementierung

Es gibt viele Möglichkeiten, die Anforderungsauthentifizierung zu implementieren. Eine der weithin akzeptierten Methoden ist die Verwendung der auf der Serverseite generierten Sitzungs-ID in Kombination mit Die Cookie-Implementierung des Browsers umfasst im Allgemeinen die folgenden vier Schritte:

1. Sitzungs-ID auf der Serverseite generieren

2

3. Extrahieren Sie die Sitzungs-ID aus dem HTTP-Header

4. Erhalten Sie die Identitätsinformationen des Anforderers aus dem serverseitigen Hash basierend auf der Sitzungs-ID

Implementierung der Sitzungsverwaltung mit Express und 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)
}));

Implementierungsstapel
Express-Sitzungsaufrufcode nach der Instanziierung (github.com/expressjs/ session)

if (!req.sessionID) {
  debug('no SID sent, generating session');
 generate();
 next();
 return;
}

Methodenaufruf generieren (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);
  }
 };

Store.set(sid, session, callback)(github.com/expressjs) aufrufen wenn RedisStore instanziiert wird (/session)

store.set ruft RedisStore.prototype.set(github.com/tj/connect-redis) auf, wobei der Seat-Hashkey das Präfix + sessionId und den Standardwert verwendet Das Präfix ist „sess“, mehrere Wenn Anwendungen denselben Redis-Sitzungsdienst gemeinsam nutzen oder nicht, stellen Sie sicher, dass das Präfix

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 aufgerufen wird (github.com/NodeRedis/node_redis )

rufen Sie schließlich die native redis.hset-Methode auf

Das obige ist der detaillierte Inhalt vonWie verwalte ich Sitzungen? Verwenden Sie Redis, um Sitzungen unter NodeJS Express zu verwalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn