我有一個登錄表單,指向secure.example.com,它初始化會話,然後重定向到www.example.com如何將會話從一個子域共享到另一個子域?
重定向時,不創建會話。回到secure.example.com,然後創建會話。這是我如何使用Cookie的限制嗎?
當然,我已經加入域:所有在session_store,具有相同的結果。
我使用Ruby on Rails的3.2
我有一個登錄表單,指向secure.example.com,它初始化會話,然後重定向到www.example.com如何將會話從一個子域共享到另一個子域?
重定向時,不創建會話。回到secure.example.com,然後創建會話。這是我如何使用Cookie的限制嗎?
當然,我已經加入域:所有在session_store,具有相同的結果。
我使用Ruby on Rails的3.2
我的配置很好,因爲我配置了domain: :all
,這就是它所需要的。
在我的情況的問題是,我必須定義在我所有的餅乾domain: :all
,就像這樣:
cookies[:new_cookie] = { :value => "value", domain: :all }
和刪除它們時:
cookies.delete :new_cookie, domain: :all
此更改後,一切正常如預期。
您擁有example.com和正確定義Cookie域,您應該可以,只要確定。有一個很好的答案,餅乾是如何工作的(或如作者說,瀏覽器實際上是如何實現它們)在這裏:How do browser cookie domains work?
在軌,設置cookie時,只是通過適當的值:domain
。
您可以在兩個應用程序中設置相同的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。
這是總體架構,可以更詳細使用這種想法。
我一直在尋找「domain::all」解決方案很長一段時間。這對我很好。謝謝! – haejeong87