2010-12-16 17 views
2

興味深いケースがあります。私は、Rails 2.3アプリケーションのホワイトラベリング機能に取り組んでおり、動的セッションドメインの設定に問題があります。Rails:動的セッションドメインとサブドメイン間の共有セッション

したがって、各ホワイトラベルには、company1.com、company2.com、company3.comの各ドメインが必要です。それぞれの上には、サブドメインのサポートとそれらの間のセッションの共有が必要です。

I.e. test1.company1.com、test2.company1.com、company1.com < =共通のセッションを共有する必要があります。 test1.example.com、example.com < =は、共通のセッションを共有する必要がありますが、company1.comとは異なるものです。

それがこのように行われています(単一塩基のドメインのための)一般的なケースで

file:production.rb 
config.action_controller.session[:domain] = '.company1.com' 

私は複数のドメインをサポートしたい場合は、私は動的にアクセスしたサイトのドメインに基づいて、この設定オプションを設定する必要があります。私は現在、この方法でそれを達成しようとしています:

file:environment.rb 
require 'dispatcher' 
module ActionController 
    class Dispatcher 
    def set_session_domain 
     tld_size = SubdomainFu.tld_size+1 
     host_name = @env['HTTP_HOST'].split('.')[-tld_size,tld_size].join('.') 
     ActionController::Base.session = { :domain => ".#{host_name}" } 
    end 
    before_dispatch :set_session_domain 
    end 
end 

しかし、上記のコードは動作しません。

似たようなことが成功したことがありますか、問題や解決策がどこにあるのかわかりませんか?

はActionControllerを使用して、あなたの時間

+0

私はこのコードの作業を取得することができました。何がうまくいかないのか分かりますか?正しい値を設定しているかどうかを確認するために、各ステップでログに「#{host_name}」を印刷してみましたか?私の推測では、:domainオプションの適切な値を設定していないということです。 –

答えて

2

のために事前にありがとう::セッションを処理ラックミドルウェアを初期化する場合にのみ、それが使用されるためBase.sessionは、したがって、あなたのアプリを起動するときにのみ、仕事に行くのではありません。上記のコードの作業を行うために、あなたは

@env['rack.session.options'] 

を使用する必要があります例えば、ここで見てください:

http://railsforum.com/viewtopic.php?id=41306

+0

例では10倍! –

関連する問題