4

我有一個支持多個域的rails應用程序,每個域可能有多個子域。配置Rails應用程序來處理多個子域和多個Cookie

用戶訪問mydomain1.com沒有收到相同的體驗mydomain2.com(儘管應用程序的基本行爲是一樣的)

因此,如果用戶登錄到mydomain1.com,它不該「T則可以登錄到mydomain2.com

如果用戶登錄到france.mydomain1.com,它應該然後在此之前記錄到germany.mydomain1.com

,我已經通過在會話存儲配置中設置域來處理此問題:

MyApp::Application.config.session_store :cookie_store, :key => '_MyApp_session', :domain => APP_CONFIG[:domain] 

我試圖找出最好的方法來處理這與多個域?

我試過在ActionDispatch::Callback附近試過黑客,但是這個請求在那裏沒有。

任何人都可以提出一種從一個應用程序中支持多個cookie的好方法嗎?

理想情況下,我想爲每個子域創建一個新的Cookie。

+0

你試過了嗎?它不應該是一個問題,因爲cookie只對設置它們的域有效。我有一個類似的設置,沒有問題。 – Wukerplank 2011-05-17 08:17:34

+0

我還沒有嘗試過它在現場設置呢......我需要編輯我的問題,因爲還有更多的問題。 – bodacious 2011-05-17 08:25:01

回答

5

你應該做的:

class ActionDispatch::Session::MultiDomainStore < ActionDispatch::Session::CookieStore 
    def initialize(app, options = {})  
    super(app, options.merge!(:domain => compute_domain(app)))  
    end 

    def compute_domain(app) 
    ... 
    end 
end 

MyApp::Application.config.session_store :multi_domain_store, :key => '_MyApp_session' 

即你的域名應該以點開頭。

+0

我無法指定一個域 - 該應用程序應該支持許多域和許多子域 – bodacious 2011-05-17 16:01:49

+0

然後,您應該創建自定義會話存儲。 查看最新答案 – Anton 2011-05-17 18:52:43

+0

啊 - 那就是我一直在尋找的! – bodacious 2011-05-17 21:36:47

1

它不應該是一個問題,因爲cookie只對每個域有效。 example1.com可以有_MyApp_sessionexample2.com可以有_MyApp_session。 Cookie由瀏覽器管理,只有在域匹配時才發送給主機。

假設您訪問example1.com並登錄,您將獲得一個值爲abcdef123的cookie。然後你登錄example2.com,你會得到一個隨機字符串uvwxyz890的另一個cookie。

如果稍後返回到example1.com,瀏覽器將只會將對該域有效的cookie發送到您的應用程序。你的應用程序不需要管理任何東西,也不需要破解任何東西。

+0

問題是我要在每個子域中共享Cookie _want_,但不是每個域。 – bodacious 2011-05-17 09:00:14

相關問題