rails 目前整個 cookie/session 機制搭載的是 activerecord-session_store 這套 gem,設定檔是在 config/initializers/session_store.rb 內。

以目前開發中的專案設定為例:

Rails.application.config.session_store :cookie_store, key: Rails.application.secrets.secret_key_base

對於 cookie/session 的機制而言,這像是個 key-value store,但以我們丟進去的 key 作為加密(不然網站早就都被 hack 光光 lol)

順道一提,rails 有提供一個產生 key 的指令:rake secret。

那說了這麼多,以想做的需求:cookie/session cross all subdomains,目前這樣的設定是沒辦法的。因為預設都是 by domain,例如 www.facebook.com 與 m.facebook.com 是有各自擁有的 cookie / session。

在 rails 中,只需在後面加入 domain: :all 即可。

Rails.application.config.session_store :cookie_store, key: Rails.application.secrets.secret_key_base, domain: :all