>웹 프론트엔드 >JS 튜토리얼 >세션을 관리하는 방법은 무엇입니까? redis를 사용하여 nodejs express에서 세션 관리

세션을 관리하는 방법은 무엇입니까? redis를 사용하여 nodejs express에서 세션 관리

零下一度
零下一度원래의
2017-04-26 10:48:091616검색

이 글은 주로 nodejs express에서 세션을 관리하기 위해 redis를 사용하는 것에 대한 자세한 설명을 소개합니다. 관심 있는 친구들이 참고할 수 있습니다.

세션 구현 원리

요청 인증을 구현하는 방법에는 여러 가지가 있습니다. 널리 사용되는 방법 중 하나는 서버 측에서 생성된 세션 ID를 결합하여 사용하는 것입니다. 브라우저의 쿠키 구현 세션 관리에는 일반적으로 다음 네 단계가 포함됩니다.

1. 서버 측에서 세션 ID 생성

2.

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 세션 호출 코드(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);
  }
 };

store.set(sid, session, callback)(github.com/expressjs/session) 호출

RedisStore는 인스턴스화됩니다.

store.set는 RedisStore.prototype.set(github.com/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.