サブドメイン間のクッキーの共有について
サブドメイン間のクッキーの共有について調べていて、分かったことがあるのでメモ。
hosts(C:\WINDOWS\system32\drivers\etc)にホスト名を書いて、たとえば
http://dev/
といった感じで開発環境などにアクセスしているとき、
http://sub.dev/
といったサブドメインとクッキーの共有はできない。
セッションにクッキーを使用しているときは、当然ながらセッションの共有もできない。
クッキーはドメイン属性を持っていて、通常(デフォルトで)ホスト名「dev」で生成される。
これをサブドメインでも読めるようにするには、ホスト名の前にドットをつけて「.dev」とする必要がある。
phpで設定しようとすると、
setcookie("TestCookie", $value, time()+3600, "/", ".dev", 1);
こんな感じ。
ところが「.dev」というドメイン属性のクッキーを作ることができなかった。
fiddlerやLive HTTP headersで通信内容を見ると、ちゃんとset-cookieを送信しているのに、ブラウザ(firefox)が受け付けてないようだ。
そこで、調べたところクッキーのドメイン属性に指定できるドメインには条件があって、今回は「ピリオドが含まれていない」という条件にひっかかったようだ。
http://hori-uchi.com/archives/000109.html
http://blog.livedoor.jp/ibisbrowser/archives/27568184.html
解決策はhostsをいじって、
http://dev.com/
という風にアクセスする。
なので、サブドメインは
http://sub.dev.com/
というようにアクセスする。
phpでは
setcookie("TestCookie", $value, time()+3600, "/", ".dev.com", 1);
としてクッキーをセットする。
そうすると、「.dev.com」というドメイン属性のクッキーを生成できるので、サブドメインでも共有できるようになる。