LoginSignup
28

More than 5 years have passed since last update.

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

Posted at

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はサブドメイン以下の共有ができない仕様になってます)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
28