複数のサブドメインを持つアプリケーションがあり、それらの間でセッション Cookie を共有したくない場合、またはさらに悪いことに、同じ session_key を持つトップレベルの .domain セッション Cookie をサブドメイン セッション Cookie と一緒に使用します (Rails は 1 つを保持し、もう一方を投げます-単にリクエストヘッダーの順序に基づいていると思います)-ディスパッチャーフックを使用して、セッションCookieをサブドメインに強制できます。
拡張機能から ActionController にフックを含めます。
base.send :after_dispatch, :force_session_cookies_to_subdomains
このドメインを after_dispatch フックに設定します。
@env['rack.session.options'] = @env['rack.session.options'].merge(:domain => 'my_sub_domain' end)
私たちにとっては、@env[HTTP_HOST] を調べて、[my_sub_domain] がどうあるべきかを判断します。
このアプローチでは、ブラウザがサブドメインの Cookie を受け入れるために、ユーザーのログインはサブドメインで行われる必要があります (Authlogic Params のようなパターンを使用してサブドメインに対する次のリクエストに伝播する場合を除く)。
注: ブラウザーは、要求が上位レベルのドメインから来る場合、サブドメインの Cookie を拒否します。私たちにとって、これは悪いことではありません。トップレベルのセッション Cookie が作成されず、後でサブドメインに送信されないという、私たちが必要とするのと同じ結果になります。
同様の目的への別のアプローチは、サブドメインからのものではない場合、Cookie を強制的に設定しないようにすることです。あまり時間をかけずに、これを達成できた方法は -
request.env["rack.session"] = ActionController::Session::AbstractStore::SessionHash.new(self, request.env)
ApplicationController の after フィルターで。