복붙노트

[REDIS] 노드 애플 리케이션 사이에 공유 세션?

REDIS

노드 애플 리케이션 사이에 공유 세션?

저는 현재 두 개의 서로 다른 포트에서 실행되는 두 개의 노드 애플 리케이션을 가지고 있지만 같은 백엔드 데이터 저장소를 공유 할 수 있습니다. 하나의 응용 프로그램을 통해로 사용자가 로그인, 자신의 세션을 사용할 수 있으며 다른 응용 프로그램에 로그인에 나타날 때 그래서 나는 두 개의 응용 프로그램 사이의 주 사용자의 세션이 필요합니다. 이 경우, 그 '공개 직면 웹 사이트 및 관리 백엔드에서.

우리의 설정은 다음과 같다 :

세션 물건 (그리고 레디 스)에 대한 설정은 모두 애플 리케이션에 대해 동일합니다 :

session: {
    options: {
        secret: "my secret",
        cookie: {
            domain: "mydomain.com",
            maxAge:1000*60*60*24
        }
    },
    redis: {
        host: 'my host',
        maxAge: 86400000,
        secret: "my secret"
    }
}

이 같은 app.js 외모에서 세션 물건에 대한 설정 :

if ( app.settings.env === "production" ) {
    session.options.store = new RedisStore(session.redis);
}
app.use(express.session(session.options));
app.use(passport.initialize());
app.use(passport.session({ secret: 'a different secret' }));

우리가이 애플 리케이션 사이의 쿠키에 동일한 세션 ID를 볼 수 있도록 : 나는 그것을 할 기대.

내 질문은 그래서 : 내가 표현, 레디 스 등 여권을 설정하려면 어떻게해야 당신이 세션은 다른 하위 도메인에 걸쳐 공유 할 수있는?

해결법

  1. ==============================

    1.어쩌면 조금 오래된,하지만이 시간에, 고속 세션 쿠키의 도메인 옵션을 인식 할 수 있습니다. 소식통에 따르면 :

    어쩌면 조금 오래된,하지만이 시간에, 고속 세션 쿠키의 도메인 옵션을 인식 할 수 있습니다. 소식통에 따르면 :

    function session(options){
      var options = options || {}
      //  name - previously "options.key"
        , name = options.name || options.key || 'connect.sid'
        , store = options.store || new MemoryStore
        , cookie = options.cookie || {}
          ...
    

    그리고이 설정 쿠키입니다 :

    var Cookie = module.exports = function Cookie(options) {
      this.path = '/';
      this.maxAge = null;
      this.httpOnly = true;
      if (options) merge(this, options);
      ...
    

    그래서,이 같은 현재 1.10.1 마스터를 위해 작동합니다 :

    secret: "my secret",
        cookie: {
            domain: "mydomain.com",
    
  2. ==============================

    2.익스프레스 세션은 따라서 문제를 쿠키에 대한 "도메인"옵션을 인식하지 않는 것 같습니다. 세션 ID를 저장하는 쿠키는 자동으로 각 응용 프로그램에 대한 도메인에 연결되어 있으므로 공유 할 수 없습니다.

    익스프레스 세션은 따라서 문제를 쿠키에 대한 "도메인"옵션을 인식하지 않는 것 같습니다. 세션 ID를 저장하는 쿠키는 자동으로 각 응용 프로그램에 대한 도메인에 연결되어 있으므로 공유 할 수 없습니다.

    하나의 옵션은 자신의 싱글 사인온 웹 어플리케이션에 걸쳐 공유 세션에 모듈을 작성하는 것입니다. 그것은 매우 초기 실행 순서에 app.use () 선언에 아마 라이브 것이라고 간단하게 (도메인 간 것) 별도의 쿠키, 별도의 SSO 세션 ID를 생성을 생성하고이 새로운 쿠키에 SSO ID를 저장하는 것 . 그 후, 당신은 단순히 크로스 채울 req.session 및 req.sso 세션 필요.

  3. from https://stackoverflow.com/questions/13617471/shared-sessions-between-node-apps by cc-by-sa and MIT license