新クッキー仕様対応ブラウザ情報スレ

このエントリーをはてなブックマークに追加
925 株価【800】 △△ ◆cZfSunOs.U
先月の Cookie 処理の変更についてですが,

以前は単純に Cookie ヘッダ文字列が例えば /hana=mogera/ にマッチするかどうか,
というような判定をしていました.しかし,それだと例えば「NAME=kirin_no_hana=mogerahmen」
のような Cookie があったりすると誤爆判定するなどの穴がありました.
それに対し,現在は Cookie ヘッダ文字列をいったん name-value ペアに
再構成した上で $cookies{鼻} が "もげら" と等しいか,というような
判定をしています.これなら上記のような誤爆判定も発生しません.

で,この変更によって問題が発生しているケースでは,おそらく

・ Cookie の区切り記号の問題
・ 同一 Cookie が複数の path / domain 階層で設定されている際の問題

といったあたりがキーポイントなのだろうと思います.

まず Cookie の区切り記号についてですが,以前は区切りを全く
考慮してなかったので適当な区切り記号でも通っていたのですが,
現在は ;,& のいずれかを区切りとして扱っています.このうち
; と , は Cookie の区切りとして標準的に用いられるものです.
一方 & は非標準のものですが,一部専ブラで用いていることが判明したため,
とりあえず区切りとして受け入れるようにしました(ただし,あくまで非標準なので
; または , を用いるように専ブラ側で変更してもらう方がいいと思います).
もし,これら以外の区切り記号を用いている専ブラがあれば,正常に動かなくなるかと.

それから同一 Cookie が複数の階層で設定されている場合ですが,例えば

    hana=monaka; path=/test/; domain=qb5.2ch.net
    hana=mogera; path=/; domain=qb5.2ch.net
    hana=mogura; path=/; domain=.2ch.net

のように Cookie が設定されている場合ですね.このような場合,標準的な
ブラウザでは階層の深いものが Cookie ヘッダ文字列中で前の方に来ます.

    hana=monaka; hana=mogera; hana=mogura

以前の判定方法では,これらのうちどれか1つさえマッチすれば
おkだったのですが,現在は一番最初の「hana=monaka」が
用いられ,それ以降の「hana=...」の Cookie は無視されます.

bbs.cgi では path=/; domain=qb5.2ch.net の階層の
Cookie を設定するようになってますが,何らかの理由により
これ以外の階層の Cookie が設定されていたら,
正常に動かなくなる可能性があります.