복붙노트

[RUBY-ON-RAILS] 어떤 일은 3 session_store 도메인 레일 : 모든 정말로?

RUBY-ON-RAILS

어떤 일은 3 session_store 도메인 레일 : 모든 정말로?

업데이트 된 질문은 좀 더 명확하게하기

Rails.application.config.session_store : cookie_store : 키 => '_my_key': 도메인 => "mydomain.com"나는이 같은 하위 도메인 사이에 공유 세션에 session_store의 도메인을 설정할 수 있습니다 이해

도메인 => : 모든 할 일 레일 3, 설정을 어떻게합니까? 그것은 당신이 최상위 도메인에서 세션을 공유 할 수 없습니다, 쿠키는 할 수 없습니다. 문서는 하나 개의 최상위 도메인을 가정했다. 여러 도메인 앱에 액세스하는 경우 어떤 일이 일어나는가?

내 응용 프로그램에서 내 사용자는 자신의 사용자 지정 도메인을 통해 하위 도메인에 액세스 할 수 있습니다 다음, 하나 개의 주 도메인의 개인 하위 도메인을 만들 수 있지만.

나는 할 수 있도록 설정 올바른 session_store 도메인은 무엇입니까 : 내 기본 도메인, 예를 들어 "mydomain.com"의 모든 도메인에 걸쳐) 공유 세션 b)는 같은 CNAME 사용자 정의 URL을 통해 "user1.mydomain.com을"예를 들어 하위 도메인 개인에 액세스하는 사용자 "some.otherdomain.com"여전히 별도의 세션을 생성 할 수 있습니다.

감사

해결법

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

    1.OK,이 작업을 수행 할 수있는 방법은 세션 쿠키 동적에 도메인을 설정하는 것입니다. 이 랙 미들웨어로 수행해야이 조기를 수행합니다 :

    OK,이 작업을 수행 할 수있는 방법은 세션 쿠키 동적에 도메인을 설정하는 것입니다. 이 랙 미들웨어로 수행해야이 조기를 수행합니다 :

    # Custom Domain Cookie
    #
    # Set the cookie domain to the custom domain if it's present
    class CustomDomainCookie
      def initialize(app, default_domain)
        @app = app
        @default_domain = default_domain
      end
    
      def call(env)
        host = env["HTTP_HOST"].split(':').first
        env["rack.session.options"][:domain] = custom_domain?(host) ? ".#{host}" : "#{@default_domain}"
        @app.call(env)
      end
    
      def custom_domain?(host)
        host !~ /#{@default_domain.sub(/^\./, '')}/i
      end
    end
    
  2. ==============================

    2.나는 기존의 답변 중 하나가 바로 내가에 칩 원 있도록 제목에 질문에 대답 생각하지 않았다.

    나는 기존의 답변 중 하나가 바로 내가에 칩 원 있도록 제목에 질문에 대답 생각하지 않았다.

    클라이언트 (브라우저) 웹 사이트로 이동하는 경우, 웹 사이트는 쿠키를 설정하도록 클라이언트를 알려줍니다. 그것은 그렇게 할 때, 쿠키 이름, 값, 도메인 및 경로를 지정합니다.

    : 도메인 => : 모든 레일 쿠키가 모든 하위 도메인에 적용하도록, (어떤 호스트 브라우저가에 찾아왔다이다) 쿠키 도메인 앞에 점을 넣어 알려줍니다.

    여기에 레일 4.1 (actionpack / lib 디렉토리 / action_dispatch / 미들웨어 / cookies.rb)에서 관련 코드입니다 :

      def handle_options(options) #:nodoc:
        options[:path] ||= "/"
    
        if options[:domain] == :all
          # if there is a provided tld length then we use it otherwise default domain regexp
          domain_regexp = options[:tld_length] ? /([^.]+\.?){#{options[:tld_length]}}$/ : DOMAIN_REGEXP
    
          # if host is not ip and matches domain regexp
          # (ip confirms to domain regexp so we explicitly check for ip)
          options[:domain] = if (@host !~ /^[\d.]+$/) && (@host =~ domain_regexp)
            ".#{$&}"
          end
        elsif options[:domain].is_a? Array
          # if host matches one of the supplied domains without a dot in front of it
          options[:domain] = options[:domain].find {|domain| @host.include? domain.sub(/^\./, '') }
        end
      end
    

    나는 당신이 이미 하위 도메인은 별도의 세션을 가질 수 있도록 대한 질문의 두 번째 부분을 대답했습니다 참조하십시오.

  3. ==============================

    3.TL; DR : 사용 @ 네이더의 코드. .rb, 인수로서 나의 점 접두어 영역을 통과 |하지만 난 내 설정 / 환경 / [개발 생산]에 추가 할 필요 발견했다. 이 레일 3.2.11에

    TL; DR : 사용 @ 네이더의 코드. .rb, 인수로서 나의 점 접두어 영역을 통과 |하지만 난 내 설정 / 환경 / [개발 생산]에 추가 할 필요 발견했다. 이 레일 3.2.11에

    쿠키 세션은 보통 당신의 최상위 도메인에 저장됩니다.

    당신은 크롬에서 보면 -> 설정 -> 고급 설정 표시 ... -> 개인 정보 / 콘텐츠 설정은 ... -> 모든 쿠키 및 사이트 데이터 ... -> 검색 {yourdomain.com} 당신은 sub1.yourdomain에 대한 별도의 항목이 될 것이라고 볼 수 있습니다 .COM 및 othersub.yourdomain.com 및 yourdomain.com

    문제는 모든 하위 도메인에 걸쳐 동일한 세션 저장소 파일을 사용하는 것입니다.

    이 미들웨어가 제공됩니다 랙 어디에 어떤 관련성 랙 및 자원 레일. :

    기본적으로 어떤이가하는 것은 루트 도메인과 동일 동일한 쿠키 파일에 쿠키 세션 데이터 다시 모든 매핑 것입니다.

    이제 lib 디렉토리에서 사용자 정의 클래스를 가지고 있는지 확인을 자동 로딩된다. 당신에게 그 의미가 아무것도 여기보기는 경우 : 3 자동로드 레일 없습니다

    우선 당신이 시스템 전체의 쿠키 저장소를 사용하고 있는지 확인하는 것입니다. 설정 / application.rb에서 우리는 쿠키 저장소를 사용하도록 레일을 말한다.

    # We use a cookie_store for session data
    config.session_store :cookie_store,
                         :key => '_yourappsession',
                         :domain => :all
    

    이 여기에 언급 여기에 그 이유 때문에이다 : 도메인 => 모든 라인. 도메인 => => ".yourdomain.com"대신 도메인 : 모든 지정 제안 다른 사람들이있다. 어떤 이유로이 나를 위해 작동하지 않았다 전술 한 바와 같이 나는 사용자 정의 미들웨어 클래스를 필요로했다.

    그런 다음에 설정 / 환경 / production.rb 추가 :

    config.middleware.use "CustomDomainCookie", ".yourdomain.com"
    

    앞의 도트가 필요합니다. "부모 도메인 요청에서 전송 하위 도메인 쿠키를?"참조 이유를.

    그런 다음에 설정 / 환경 / development.rb 추가 :

    config.middleware.use "CustomDomainCookie", ".lvh.me"
    

    lvh.me 트릭은 로컬 호스트에 매핑합니다. 그것은 굉장. 추가 정보를 하위 도메인에 대한이 Railscast이 노트를 참조하십시오.

    바라 건데 그게해야한다. 솔직히 프로세스가 나는 크로스 하위 도메인 사이트가 공통적으로 느끼는대로이, 뒤얽힌하지 완전히 확인하는 이유입니다. 사람이 각 단계 뒤에 이유에 더 통찰력이있는 경우, 코멘트에 우리를 계몽하십시오.

  4. ==============================

    4.이 옵션은 반드시 응용 프로그램이 하위 도메인에 걸쳐 세션을 공유 할 수 있도록하는 데 사용됩니다. : 모든 옵션은 우리가 대신 도메인 이름을 지정할 수 있으며, 그 세션에 대한 기본 도메인으로 사용됩니다하지 않으면 우리의 응용 프로그램이 1의 최상위 도메인 크기를 가지고 있다고 가정합니다.

    이 옵션은 반드시 응용 프로그램이 하위 도메인에 걸쳐 세션을 공유 할 수 있도록하는 데 사용됩니다. : 모든 옵션은 우리가 대신 도메인 이름을 지정할 수 있으며, 그 세션에 대한 기본 도메인으로 사용됩니다하지 않으면 우리의 응용 프로그램이 1의 최상위 도메인 크기를 가지고 있다고 가정합니다.

  5. ==============================

    5., 음

    , 음

    나는 www.xyz.com에서와 xyz.com에서 호스팅되는 응용 프로그램을 배포 할 수 있습니다.

    나를 위해, : 도메인 => : 모두 xyz.com에 세션 쿠키에 대한 도메인을 설정합니다. 그래서이 아닌 최상위 도메인하지만 TLD는 위의 1 개 수준.

    얀 빌렘

  6. from https://stackoverflow.com/questions/4060333/what-does-rails-3-session-store-domain-all-really-do by cc-by-sa and MIT license