この記事では主に、nodejs Express での redis を使用したセッションの管理について詳しく説明します。興味のある方は参考にしてください。
セッション実装原則
リクエスト認証を実装するには多くの方法があり、広く受け入れられている方法の 1 つは、サーバー側で生成されたセッション ID とブラウザーの Cookie を組み合わせてセッションを管理することです。次の 4 つの方法 手順:
1. サーバー側でセッション ID を生成します
2. サーバー側とクライアントでセッション ID を保存します
3. HTTP ヘッダーからセッション ID を抽出します
4. . セッションIDに応じてサーバー側のハッシュからリクエスターの身元情報を取得
Expressと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) }));
実装スタック
インスタンス化後のExpress-session呼び出しコード(github.com/) Expressjs/session)
if (!req.sessionID) { debug('no SID sent, generating session'); generate(); next(); return; }
メソッド呼び出しを生成 (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)
store.set は RedisStore を呼び出します。 Prototype.set(github.com) (RedisStore /tj/connect-redis) をインスタンス化するとき、シート ハッシュキーはプレフィックス + sessonId を使用し、複数のアプリケーションが共有する場合、または共有しない場合のプレフィックスのデフォルト値は 'sess' です。同じ Redis セッション サービスを共有する場合は、必ずプレフィックスを設定してください
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 は (github.com/NodeRedis/node_redis) を呼び出します
最後にネイティブ redis.hset メソッドを呼び出します
以上がセッションを管理するにはどうすればよいですか? Redis を使用して、nodejs Express でセッションを管理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。