2016-09-14 8 views
0

私は各組織にサブドメインを介して独自のポータルを提供するマルチテナントアプリケーションを実行しているとします。各サブドメインでブラウザセッションが一意ですか?

例 -

  • orgA.application.com
  • orgB.application.com
  • 等...

各サブドメインが私のPSQL DBに異なるスキーマ/テナントから読み込み、それ以外は同じアプリケーションであります。各サブドメインのユーザーアカウントを持っているように、自分自身として

def current_user 
    if session[:user_id] 
    @current_user ||= User.find_by_id(session[:user_id]) 
    end 
end 

がありますが、いくつかの管理者/スーパーユーザ - 私のApplicationController

私はcurrent_userように設定します。ユーザー(id = 22)とorgAにログインすると、sessionuser_id: 22に設定されます。

今、私のユーザIDが44であるorgBに切り替えたいとします。 orgAにセッションを設定した後にorgBにログインした場合、のユーザとして間違ってログインする可能性はありますか?orgB

さらに基本的に、私はブラウザのクッキーセッションがどのように設定されているかを理解しようとしています。私の理解では、クライアントのブラウザに暗号化されキャッシュされた変数のハッシュです。それはサブドメインごとに設定されていますか?または、特定のサイトのすべてのサブドメインが同じキャッシュ/セッションCookieを共有していますか?

上記の例のように、セッションの相互受粉を防ぐにはどうすればよいですか?私のcurrent_userメソッドがあまりにも基本的ですか?

ありがとうございます!

答えて

1

回答が比較的簡単なクッキーについて基本的に質問しています。明示的にリクエストしない限り、クッキーはではなく、はサブドメイン間で共有されています。

Set-Cookie HTTPヘッダーを送信してユーザーのブラウザにCookieを作成すると、domain構成オプションを含めるかどうかを選択できます。このオプションは、Cookieが保存するドメインとCookieが配信されるドメインを制御します。あなたがいないdomainオプションでSet-Cookieを送信する場合、デフォルトで

は、クッキーは、サブドメインを含んで現在のホスト名、ために設定されます。つまり、siteA.example.comに設定されたCookieはsiteB.example.comにアクセスできません。あなたがsiteA.example.com上のクッキーを作成するときにexample.comdomainオプションを送信する場合

は、その後、クッキーはそのすべてのサイトがそれにアクセスできるようになり、example.com*.example.comの両方にアクセスできるようになります。

domainオプションを使用して、状況に応じてSet-Cookieヘッダーを送信する必要があります。これはほとんどの設定ではデフォルトであるincluding Railsなので、何もする必要はありません。

+0

私はクリアでデフォルトのままにしているようなサウンドです。完璧で明確な説明 - ありがとう! – user2490003

関連する問題