2004年6月1日火曜日

mod_perl環境で複数Cookieを送信する

mod_perl環境でCookieをクライアントに送信するには、CGI::Cookieモジュールなんかを使って、こんな風にかけるんですが、

my $cookie = CGI::Cookie->new(%options);
$r->header_out('Set-Cookie' => $cookie);

違う名前の複数のCookieを送信したい場合、

my $cookie = CGI::Cookie->new(%options);
my $cookie2 = CGI::Cookie->new(%options2);
$r->header_out('Set-Cookie' => $cookie);
$r->header_out('Set-Cookie' => $cookie2);

としても最後にセットしたクッキーしか送られなかったりして、うきーっとなります。こういうときはheader_outの代わりにcgi_header_outを使うと複数のクッキーをセットできちゃいます。

my $cookie = CGI::Cookie->new(%options);
my $cookie2 = CGI::Cookie->new(%options2);
$r->cgi_header_out('Set-Cookie' => $cookie);
$r->cgi_header_out('Set-Cookie' => $cookie2);

恥ずかしながらこのことを知らず、クッキーが保存されないよ~としばらく半べそ状態でした。。



2 件のコメント:

  1. バージョンが違うのか環境が違うのかは知りませんが、私の環境ではcgi_~メソッドが無く、全べそ状態でしたw
    (Apache::RequestRec by mod_perl 1.99)
     $r -> headers_out -> add ('Set-Cookie' => $cookie);
     $r -> headers_out -> add ('Set-Cookie' => $cookie2);
    最終的にモジュールのperldoc読んで上記のような代替メソッドを発見。
    あまり情報の少ない部分でしたので、一応コメントしてみました。
    以上でし。

    返信削除
  2. 情報ありがとうございます。
    これは、mod_perl1.xと2.xの違いによるものですね。
    mod_perl2.xではそう書かないといけないっすね。

    返信削除