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();

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