ホームページ  >  記事  >  ウェブフロントエンド  >  セッションを管理するにはどうすればよいですか? Redis を使用して、nodejs Express でセッションを管理する

セッションを管理するにはどうすればよいですか? Redis を使用して、nodejs Express でセッションを管理する

零下一度
零下一度オリジナル
2017-04-26 10:48:091579ブラウズ

この記事では主に、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。