クッキー その2
説明するまでもないと言いつつその説明だけで終わってしまった前回。
さて、IE6になって、ドメイン毎にクッキーを受け入れるか拒否するかを設定できるようになった。以前はクッキーを受け付けるか受け付けないかを切り替えられるだけだった。
何も設定されていないドメインから発行されたクッキーについては、ファーストパーティのクッキーは受け入れ、サードパーティのクッキーは拒否するようになっている。
ここでファーストパーティとサードパーティというのが出てきたが、前者はクッキーを発行するホストとクッキーを受け取るホストが同じ物、後者は別のホストで受ける物だ。
これでは少し分かりづらいかも知れない。たとえば、sample.example.com/test.html というアドレスを開くとする。その中にアクセスカウンタがあり、sample.example.com/cgi-bin/count/counter.cgi というCGIを呼び出しているという構成。この場合は、ホスト名が同じ為にファーストパーティクッキーとなり、初期状態ではクッキーが有効になる。
また、メインで使っているサーバではCGIが使えず、別にCGIが使えるサーバを借りている場合もある。HTMLファイルはさっきと同じ場所で、CGIは、たとえば cgi.hogehoge.com/counter/count.cgi にアップしているとする。この場合はホスト名が違うのでサードパーティクッキーとなり、初期状態ではクッキーが拒否される。
そういう仕様変更があったのを知らず、フレームを使って一定時間毎にリロードを行う物を書いたのだが何故かクッキーが通らず、うまく動かなかった。また、最近必要に迫られて簡単なカウンタを作ったのだが、同じ理由でクッキーが発行されず、その時は理由が分からずかなり悩んだ。
domainやpathを設定しても何も変わらず半ば諦めかけたが、いくつかカウンタCGIを試していると、どうも同じ状況なのにもかかわらずクッキーが発行されているカウンタがあった。不思議に思い調べてみると、見つけた。
これだ。たったこれだけだ。これをヘッダに入れるだけでOKなのだ。PERLで書くと、
print <<'EOM'; Content-Type: image/png P3P: CP="NOI ADMa" EOM
と言ったところだろうか。こう出力するだけで、サードパーティのクッキーでも受け入れてくれるようになる。これが何を意味するかについてはhttp://www.rescue.ne.jp/cgi/P3P/を見て欲しい。
こんなに簡単に回避できてしまうとなると、この機能には何の意味があるのだろう…よくわからない。