Maison > Article > interface Web > Comment gérer les séances ? Utilisez Redis pour gérer les sessions sous nodejs express
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('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) }));
Pile d'implémentationCode d'appel de session express après instanciation (github.com/expressjs/ session)
if (!req.sessionID) { debug('no SID sent, generating session'); 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 === 'auto') { 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('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 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!