以前のアイテムで、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 使うようになってれば問題ないんだろうけど・・・妙な共通モジュール使ってるもんでたまに困ります。
なぜか isql で localhost 上の SQLServer 2000 に接続できないとかありましたので、そのお話。
[Read More!]