[ruby-on-rails] 在Rails中的子域之間共享會話(cookie)?


Answers

http://excid3.com/blog/sharing-a-devise-user-session-across-subdomains-with-rails-3/

“你需要注意的部分是,如果你設置了:domain =>:在某些地方推薦使用all,除非你使用本地主機,否則它將不起作用。:所有缺省值都是TLD長度為1 ,這意味著如果你使用Pow(myapp.dev)進行測試,它將不起作用,因為它是長度為2的TLD。“

換句話說,你需要:

 App.config.session_store ... , :domain => :all, :tld_length => 2

清除Cookie也是一個好主意

Question

我有一個應用程序設置,其中每個用戶都屬於一家公司,並且該公司有一個子域(我正在使用basecamp樣式的子域)。 我面臨的問題是rails會創建多個cookie(一個用於lvh.me,另一個用於subdomain.lvh.me),這在我的應用程序中造成了很多中斷(例如,一直刷新所有請求的Flash消息登錄)。

我在/cofig/initilizers/session_store.rb文件中有這個:

AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: :all

域名::​​似乎都是我在Google上找到的標準答案,但這似乎不適合我。 任何幫助表示讚賞!




我在查找將cookie設置為根域的最簡單方法時遇到了這個問題。 似乎有一些關於:all作為域選項傳遞的:all選項的錯誤信息。 對於大多數域,它實際上會按預期工作,將Cookie設置為根域(例如, .example.com )。 我想大多數人遇到問題,因為他們正在使用域lvh.me來測試。 rails用於查找頂級域的正則表達式被定義為DOMAIN_REGEXP = /[^.]*\.([^.]*|..\...|...\...)$/ 。 如果您注意到最後一部分,您可以看到,rails將lvh.me解釋為類似於com.au的TLD。 如果您的用例需要lvh.me才能正常工作,那麼:all選項將無法正常工作,但它似乎是大多數域的最簡單和最佳選擇。

TL; DR,這裡的正確答案是,假設你沒有開發一個3字母的域(或任何混淆了上述正則表達式的域),就是使用:all




你試過了嗎

AppName::Application.config.session_store :cookie_store, key: '_application_devise_session', domain: 'lvh.me'  

基本上我們說基礎域只有一個cookie,而忽略子域..雖然這種方法仍然有一些缺陷......




Related