続・Cookie設定をPerlで
Cookie設定をPerlで - Perl日記
前回の続き。
Cookieに複数の値を設定するためには、「Set-Cookie文」をその都度出力するしかないらしい。(意外と力づくというか原始的な印象だ)
というわけで、そのサブルーチンを書いてみる。
ただし1ドメインにつき20個以内とか、4KB以内とかいった考慮はしていない。
1.自力
前回作成サブルーチンを使用。
もうみたまんまそのまんま。
sub set_cookies { # [$name, $value, $attr] x n my @set_cookies = @_; for my $set_cookie (@set_cookies) { set_cookie(@$set_cookie); # 前回作成サブルーチン } } my @set_cookies = ( ['id'=>'rightgo09', {path=>'/cgi-bin/test1/'}], ['today'=>'2009/11/28', {secure=>1}], ); set_cookies(@set_cookies); #=> Set-Cookie:id=rightgo09; path=/cgi-bin/test1/; #=> Set-Cookie:today=2009%2F11%2F28; secure
2.モジュールを使う
と思ったけれど、特にそれ用のモジュールってないのかな?
でもCGI::Cookie.pmのドキュメントを見てたら、次のような箇所があった。
# If you want to set the cookie yourself, Within a CGI script you can # send a cookie to the browser by creating one or more Set‐Cookie: fields # in the HTTP header. Here is a typical sequence: my $c = new CGI::Cookie(-name => 'foo', -value => ['bar','baz'], -expires => '+3M');
$cの中身。
print $c; #=> foo=bar&baz; path=/; expires=Fri, 26-Feb-2010 09:20:03 GMT
valueを配列リファレンスにして、複数指定すると「&」で繋がって出てくるらしい。
取得側で「&」でsplitして使うってところかな。
うーん。基本的にやることは一緒か。
なんだかもう単体の「set_cookie()」を使いたい分だけ使うという方が、無理矢理引数つけて複数設定対応にするより、シンプルで良いような気もする。
さじ加減がわからん。