Posted at

railsでcookieをサブドメイン以下共有

More than 5 years have passed since last update.

cookieはdomainに.example.comとするとサブドメイン以下共有されます。

railsはconfig/initializers/session_store.rbで


config/initializers/session_store.rb

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


とするとリクエストからドメインを取得し、.example.comの形でcookieに設定してくれます。

ただ、問題はlocalhostです。

どうもcookieの仕様っぽいのですが、domainはsubdomain.domainname.domainの形しか受け付けてくれません。

つまり、railsのdomain: :allだと、.localhostになってしまい、うまくいきません。

VirtualHostでsubdomain.domainname.domainの形になるようUrlRewritingしてもいいですが、前回同様プロキシでやってしまいます。


proxy.pac


function FindProxyForURL(url, host) {
if (shExpMatch(host, "*.localhost.dev")) {
return "PROXY localhost:3000";
}
if (shExpMatch(host, "localhost.dev")) {
return "PROXY localhost:3000";
}
return "DIRECT";
}


ここでは*.localhost.devを受け付けてますが、もちろんdevじゃなくても良いです。

これで晴れてlocalhostでも本番環境でもそのままにサブドメイン以下のcookieが共有されます。

ログイン情報とかを共有しないといけない時にはこれを、

逆にサブドメインごとでデータを区切りたい時はWebStorageを使うと便利です。

(WebStorageはサブドメイン以下の共有ができない仕様になってます)