[Tokyo.pm] mod_perl と cookie

Keiichi Okabe k.okabe @ ntt-bb.com
2002年 2月 25日 (月) 23:35:35 CST


前田さん,お世話になります.というわけで,もう一回

岡部です.

mod_perlでcookieを取得する方法について教えてください.
win32用にはApache::Cookieがないようなので,(違ってたら教えて!)
こんな感じで取得しようとしていますが,

    sub handler{
      my $r = shift;
      my $host = $r->get_remote_host;
      my $header = $r->header_in('Cookie');
      my %cookies = parse CGI::Cookie($header);
      my $session_id = $cookies{'session_id'}->value if $cookies{'session_id'};

parse CGI::Cookie のところでおちてしまいます.
Apacheのログを見ると,以下のようなメッセージが出ているのですが,

Undefined subroutine &CGI::unescape called at C:/Perl/lib/CGI/Cookie.pm line 75.
Attempt to free unreferenced scalar.

どのように扱えばよいかよくわかりません.何かヒントでもいただけないでしょうか.
ちなみに作ってみているのは,アクセスカウントを行うスクリプトで
全体は以下のようになっています.

    package Apache::Hello3;

    use strict;
    use CGI::Cookie;
    use Apache::Constants qw(:common);
    use Apache::Session::File;
    our $base = 'C:/Program Files/Apache Group/Apache/lib/perl/Apache';

    sub handler{
      my $r = shift;
      my $host = $r->get_remote_host;
      my $header = $r->header_in('Cookie');
      my %cookies = parse CGI::Cookie($header);
      my $session_id = $cookies{'session_id'}->value if $cookies{'session_id'};

      my %session;
      tie %session,'Apache::Session::File',$session_id,
        {Directory => "$base/lock"};
      ++$session{access};

      my $state_cookie = CGI::Cookie->new(
        -name => 'session_id',
        -value => $session{_session_id}
      );

      $r->content_type('text/html');
      $r->header_out('Set-Cookie' => $state_cookie);
      $r->send_http_header;
      $r->print(<<END);
    <HTML>
    <HEAD>
    <TITLE>Hello There</TITLE>
    </HEAD>
    <BODY>
    <H1>Hello $host</H1>
    Your access: $session{access}, $session_id, $session{_session_id}
    </BODY>
    </HTML>
    END

      return OK;
    }

    1;
---
k.okabe @ ntt-bb.com   岡部 恵一
成功出於衆者、先知也、先知者、必取於人、知敵之情者也
          孫子 用間篇 第十三




Tokyo-pm メーリングリストの案内