31
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

31
28
0

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
  3. You can use dark theme
What you can do with signing up
31
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?