Road To Nowhere

主にWebまわりのエンジニア的なお仕事に関するようなことのあれこれ。

サブドメイン間のクッキーの共有について

サブドメイン間のクッキーの共有について調べていて、分かったことがあるのでメモ。


hosts(C:\WINDOWS\system32\drivers\etc)にホスト名を書いて、たとえば

http://dev/

といった感じで開発環境などにアクセスしているとき、

http://sub.dev/

といったサブドメインとクッキーの共有はできない。
セッションにクッキーを使用しているときは、当然ながらセッションの共有もできない。


クッキーはドメイン属性を持っていて、通常(デフォルトで)ホスト名「dev」で生成される。
これをサブドメインでも読めるようにするには、ホスト名の前にドットをつけて「.dev」とする必要がある。


phpで設定しようとすると、

setcookie("TestCookie", $value, time()+3600, "/", ".dev", 1);

こんな感じ。


ところが「.dev」というドメイン属性のクッキーを作ることができなかった。
fiddlerLive 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」というドメイン属性のクッキーを生成できるので、サブドメインでも共有できるようになる。


ほんとはfirefoxだけでなく、各ブラウザの仕様やcookieRFCもよく見たいところだけど、また今度。