miau's blog?

PHP の Cookie まわり

ちょっと前に出た問題。

先日 Web サイトのリニューアル案件があったんだけど、旧コンテンツからの Cookie を引き継ぐ必要がありました。
ちなみに Cookie の名前は「www.example.com.hogecode」とか。わざわざ名前にドメイン名入れてるってことは Cookie の仕組みわかってないんじゃないかなー、なんてことを思いつつ、新サイトでも同名の名前で Cookie を使おうとしたんですが。

setcookie("www.example.com.hogecode", "hoge");

としたものが

$_COOKIE["www.example.com.hogecode"]

でなぜか取得できない。




とりあえず、var_dump($_COOKIE) してみると・・・

array(1) {
["www_example_com_hogecode"]=>
string(4) "hoge"
}

というように、"." の部分が勝手に "_" に置き換えられてたり。
PHP の内部で変な処理が入ってるみたいで・・・なんとなく register_globals の名残のような気がする。
勝手に変な処理しないで欲しいなぁ。

折角なので影響範囲を調べてみた。
RFC 2965 によると、Cookie の名前として使える記号は !#$%&'*+-.^_`|~ の 15 文字。
(初期の Netscape の仕様だと ";" と "," 以外は全部使えることになってるけど、それは置いといて)
試しにこの名前で

setcookie("!#$%&'*+-.^_`|~", "hoge");

として、var_dump($_COOKIE) すると・・・

array(1) {
["!#$%&'*_-_^_`|~"]=>
string(4) "hoge"
}

こんな感じで、"+" と "." だけが "_" に置換されるっぽい。

PHP 側で変な処理を入れてる以上、PHP でこれと同様の置換を行う関数(to_varname() みたいなの)を準備すべきだと思うんですけど。
そしたら、$_COOKIE へのアクセスの際は、

$_COOKIE[to_varname($COOKIE_NAME)]

みたいに統一できるので。


(追記というか書き忘れ)

この現象に言及してるサイトもあるにはあったので、一応メモ。

Variables from outside PHP

・IMAGE SUBMIT variable names
・Dots in incoming variable names

あたりに。ただし、ドットが変数名に含まれる場合のケーススタディっぽい説明であって、仕様に関して書いてあるわけではなかったり。
posted at 09:13:19 on 2006-09-13 by miau - Category: General No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

No comments yet

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。