読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

続・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()」を使いたい分だけ使うという方が、無理矢理引数つけて複数設定対応にするより、シンプルで良いような気もする。
さじ加減がわからん。