2009-01-27 106 views
1

我有一個單獨的Rails 2.2.2應用程序,我想與多個客戶端共享。每個客戶都有自己的域名和數據庫。目的是讓一個Rails應用程序「託管」很多網站。爲一個Rails應用程序使用多個域名時保留會話

我使用Apache作爲混合羣集的前端,作爲Web服務器。爲了讓Rails知道哪個請求用於哪個客戶端,Apache爲每個請求添加一個'client_id'頭。 Rails使用這個'client_id'來選擇正確的數據庫。

只要我一次只從一個域名訪問它,這種方法就可以很好地工作。說'example1.com'。

它甚至可以正常工作 - 主要是 - 當許多用戶同時從多個域名訪問應用程序時。

我遇到的一個問題是,當兩個用戶同時從兩個域名訪問應用程序時,Cookie以意想不到的方式被重置

問題是在下面的代碼段日誌所示:

該第一請求是來自用戶1登錄到example1.com。

第二個請求來自用戶2,用於example2.com主頁。

第三個請求來自用戶1,用於應用程序中的另一個頁面。據推測,該請求包括原始cookie。 問題是,爲什麼Rails發送不同的cookie回來?

請注意,不像其他幾個問題,我不想跨多個域共享相同的cookie。上例中的用戶1和用戶2正在訪問不同的域。

約翰 -

**1st Request from USER 1 for example1.com** 
    Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:15:27) [GET] 
     Session ID: 00b9cfb6fd397e5c9934ea58eaef648d 
    >>> Request for client 90873721, EXAMPLE1.COM 
    Rendering template within layouts/admin/standard 
    Rendering admin/cms/list 
    Completed in 114ms (View: 14, DB: 81) | 200 OK [https://example1.com/admin/cms] 

**2nd Request from User 2 for example2.com**  
    Processing CmsController#cms_show (for 64.1.215.163 at 2009-01-27 13:16:15) [GET] 
     Session ID: 4fed1c59001f7484a63fb6280376825a 
     Parameters: {"alias"=>"home.html"} 
    >>> Request for client 48218343, EXAMPLE2.COM 
    ### alias: home.html 
    Rendering template within layouts/two-column 
    Rendering cms/cms_show 
    Completed in 23ms (View: 13, DB: 3) | 200 OK [http://example2.com/] 

**3rd Request from User 1 for example1.com -- note session ID changes!!!**  
    Processing Admin::CmsController#index (for 75.127.142.66 at 2009-01-27 13:16:18) [GET] 
     Session ID: 85c178aa70ed2bef6a767e844bf6c6d6 
    >>> Request for client 90873721, EXAMPLE1.COM 
    ####### 'admin/cms', 'index' 
    Redirected to actionsignincontroller/admin/user 
    Filter chain halted as [:check_authentication] rendered_or_redirected. 
    Completed in 4ms | 302 Found [https://example1.com/admin/cms] 

**4th request -- redirected from 3rd request**  
    Processing Admin::UserController#signin (for 75.127.142.66 at 2009-01-27 13:16:18) [GET] 
     Session ID: 85c178aa70ed2bef6a767e844bf6c6d6 
    >>> Request for client 90873721, EXAMPLE1.COM 
    Rendering template within layouts/admin/standard 
    Rendering admin/user/signin 
    Completed in 10ms (View: 6, DB: 0) | 200 OK [https://example1.com/admin/user/signin] 

回答

1

那麼,我通過消除共享的mongrel_cluster來解決問題,併爲每個域分配它自己的雜種實例。

我希望能夠通過共享一個雜種羣集來節省一些服務器資源,但要這樣做,我需要弄清楚如何解決這個cookie問題。順便說一句,我在「Advanced Rails Recipes」中找到了部分解決方案83,「爲用戶提供他們自己的子域」。該配方還解釋瞭如何爲用戶提供自己的域名,但它使用的方法與我嘗試的不同。

0

我不是要追蹤跨不同域的用戶。事實上,如果一個用戶有兩個瀏覽器打開,並且同時使用兩個域,那麼他有兩個不同的會話Cookie,每個域都有一個。

相關問題