[Tokyo.pm] Re: mod_perl と cookie

Keiichi Okabe k.okabe @ ntt-bb.com
2002年 2月 26日 (火) 05:35:24 CST


岡部です.

----- Original Message ----- 
From: "Tatsuhiko Miyagawa" <miyagawa @ edge.co.jp>
To: <tokyo-pm-list @ happyfunball.pm.org>
Sent: Tuesday, February 26, 2002 5:30 PM
Subject: Re: [Tokyo.pm] Re: [Tokyo.pm] Re: mod_perl と cookie


>   my $session_id = $cookies{'session_id'} ? $cookies{'session_id'}->value : 0;
> みたいにする必要があると思います。

半分はこれであたりでした.Win32では,SerializeにStorableを使っている
とうまく動かないようで,これをApache::Session::Flexを使ってBase64に
変更したらうまく動きました.以下のようになります.

 package Apache::Hello3;
 
 use strict;
 use Apache::Constants;
 use Apache::Cookie;
 use Apache::Session::Flex;
 our $base = 'C:/Program Files/Apache Group/Apache/lib/perl/Apache';
 
 sub handler{
   my $r = shift;
   my $host = $r->get_remote_host;
   my %cookies = Apache::Cookie->fetch;
   my $session_id = $cookies{'session_id'} ?
        $cookies{'session_id'}->value : 0;
 
   my %session = ();
   tie %session,'Apache::Session::Flex',$session_id,{
     Store => 'DB_File',
     Lock  => 'Null',
     Generate => 'MD5',
     Serialize => 'Base64',
     FileName => "$base/sessions.db",
   };
   ++$session{access};
   my $state_cookie = Apache::Cookie->new($r,
     -name => 'session_id',
     -value => $session{_session_id}
   );
 
   $r->content_type('text/html');
   $state_cookie->bake;
   $r->send_http_header;
   $r->print(<<END);
 <HTML>
 <HEAD>
 <TITLE>Hello There</TITLE>
 </HEAD>
 <BODY>
 <H1>Hello $host</H1>
 Your access: $session{access}
 </BODY>
 </HTML>
 END
 
   return OK;
 }
 
 1;
---
k.okabe @ ntt-bb.com   岡部 恵一
成功出於衆者、先知也、先知者、必取於人、知敵之情者也
          孫子 用間篇 第十三




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