2012-12-04 88 views
2

我有一個登錄表單,指向secure.example.com,它初始化會話,然後重定向到www.example.com如何將會話從一個子域共享到另一個子域?

重定向時,不創建會話。回到secure.example.com,然後創建會話。這是我如何使用Cookie的限制嗎?

當然,我已經加入域:所有在session_store,具有相同的結果。

我使用Ruby on Rails的3.2

回答

1

我的配置很好,因爲我配置了domain: :all,這就是它所需要的。

在我的情況的問題是,我必須定義在我所有的餅乾domain: :all,就像這樣:

cookies[:new_cookie] = { :value => "value", domain: :all } 

和刪除它們時:

cookies.delete :new_cookie, domain: :all 

此更改後,一切正常如預期。

+0

我一直在尋找「domain::all」解決方案很長一段時間。這對我很好。謝謝! – haejeong87

0

您擁有example.com和正確定義Cookie域,您應該可以,只要確定。有一個很好的答案,餅乾是如何工作的(或如作者說,瀏覽器實際上是如何實現它們)在這裏:How do browser cookie domains work?

在軌,設置cookie時,只是通過適當的值:domain

0

您可以在兩個應用程序中設置相同的session_key。在appA environment.rb中更改session_key,像這樣

Rails::Initializer.run do |config| 
    ... 
    config.action_controller.session = { 
    :session_key => '_portal_session', 
    :secret  => '72bf006c18d459acf51836d2aea01e0afd0388f860fe4b07a9a57dedd25c631749ba9b65083a85af38bd539cc810e81f559e76d6426c5e77b6064f42e14f7415' 
    } 
    ... 
    end 

在AppB中執行相同操作。 (記得用同樣的祕密)

現在你已經共享會話。假設您使用restfull_authentication,它會設置一個名爲user_id的會話變量。當您在appA中進行身份驗證時,它會在會話中設置user_id。現在,在appB中,您只需驗證會話中是否存在user_id。

這是總體架構,可以更詳細使用這種想法。