北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

CGI::CookieとApache::Cookieの微妙な関係

mod_perlCGIが混在する環境*1で、CGI::CookieApache::Cookieを両方使ってみたんだがここに大きな落とし穴。この二つのモジュールは「+」の扱いが違う。

CGI::Cookie->new(-name => 'a', -value => '1+2 3');

では、「a=1%2B2%203; path=/」と言うクッキーになり、

Apache::Cookie->new($r, -name => 'a', -value => '1+2 3');

だと「a=1+2%203; path=/」と言うクッキーができあがる。

よって、Apache::Cookieから発行したクッキーをCGI::Cookieでfetchすると、+がスペースに変換されたデータが手に入る。アイタタタ。

*1:mod_perlに移行できない古いCGI資源があるです