miau's blog?

CGI.pm を使わずに cookie 取得とか

以前のアイテムで、Perl から PHP のセッション情報を読んだりしてましたが。
PHP のセッション情報に保存されたユーザ ID を確認して、ユーザ認証を行うのが目的でした。

ということで、認証が必要な CGI の先頭に、


use CGI qw(:standard);
use PHP::Session;

my $sess_id = cookie('PHPSESSID');
my $session = PHP::Session->new($sess_id);

my $user_id = $session->get('user_id');

こんな感じの処理を仕込んでたんですが・・・この後 cgi-lib.pl みたいな処理で POST データ読もうとしても、読み込めなかったり。

原因調べてみると、CGI::cookie() を呼んだ時点でいろいろ autoload されて、POST データが CGI.pm に横取りされてしまってる模様。

仕方ないから、手動でデータ取得したり。

my $sess_id = '';
my $raw_cookie = $ENV{HTTP_COOKIE} || $ENV{COOKIE};
my @cookies = split /;/, $raw_cookie;
foreach my $cookie (@cookies) {
my ($key, $value) = ($cookie =~ /\s*(\w+)\s*=\s*(.*)\s*/);
if (defined $key && %key eq 'PHPSESSID') {
$sess_id = $value;
}
}

適当に書いたけど、とりあえずちゃんと動作してる様子。

ちゃんと処理全体で CGI.pm 使うようになってれば問題ないんだろうけど・・・妙な共通モジュール使ってるもんでたまに困ります。

posted at 08:08:45 on 2005-10-25 by miau - Category: Work No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

ma wrote:

懐かしい。。
大学の頃は cgi.pm の存在など知らずに共通関数にしてましたっけ。
2005-10-25 09:23:39

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。