17 August 2008

(Perl) PerlでPHPのセッション情報を利用

PHPで利用しているセッション情報を、Perlスクリプトで利用できないか。試してみた

PHPのセッションファイルの例


key|s:16:"OQLxya7yvFhUjVDZ";user|s:8:"username";logontime|i:1219587745;

CGIのセッションファイルの例


$D = {'_SESSION_ID' => '6d581627e71050d2294a03bfa525c573','_SESSION_REMOTE_ADDR' => '192.168.1.1','_SESSION_CTIME' => 1219587859,'key' => 'PVhSizTnh3ns1Rr5','_SESSION_ATIME' => 1219587872,'user' => 'username','logontime' => 1219587872,'_SESSION_EXPIRE_LIST' => {}};;$D

セッションファイルのデータ形式が全く違う… が、Perlで無理やり読み込むスクリプトらしきものを作ってみる。 (セッション情報内に保存されている 「user」を読み出すスクリプトを作る)


#!/usr/bin/perl

use strict;
use CGI;
use CGI::Session;
use CGI::Session::Driver::file;

print "Content-type: text/html\n\n";
print "<html>\n<bodt>\n";

my $cgi=CGI->new;
# CGISESSID ではなく、 PHPSESSID のクッキーを用いる
my $sid=$cgi->cookie('PHPSESSID')||$cgi->param('PHPSESSID')||undef;

# セッションファイルの命名法を cgisess_0000... ではなく、 sess_0000... とする
$CGI::Session::Driver::file::FileName = "sess_%s";

# PHPのセッションファイル保存場所と同じディレクトリを用いる
my $session=CGI::Session->new(undef,$sid,{Directory=>'/var/tmp'});

# セッションからデータを読み込む
my $user = $session->param('user');

print $user;

$session->close();

このスクリプトでは、読み込めなかった…