めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

CGIでセッション機能

PerlでのCGIで「セッションがないからねぇ」と、よく言われます。でも、調べていくとセッションは実現できそうな感じを受けていました。実際に調べてやったことがないので、「PHPは簡単にセッションができていいね」と答えていたりしました。ただ、そうもいかない状況が出てきたので、調べて実際にテストしてみました。特にレンタルサーバなので、PMだって簡単にインストールなんてできねぇよ、という状況下での話です。

利用するのは、Walrus::Session::Liteモジュール。

で、使い方は書いてあります。でも、ワタシよくわかりませんでした。そこで、以下のようなサンプルを作りました。

「extilib」に上記のURLから解凍したファイルを置きます。
セッション保存用に、「session」というディレクトリを用意します。

CGI1


#!/usr/local/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);

use lib qw(../extlib);
use Walrus::Session::Lite;

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

my $session_dir = './session/'; #セッション保存用DIR
my %session_data; #セッションデータ
#新しいセッションを発生
tie(%session_data, 'Walrus::Session::Lite', $session_dir);
my $sid = $session_data{'_session_id'}; #セッションID
my @ID = tied(%session_data)->list_session_id;

%session_data = ( 'id' => 'test', 'pw' => 'hatena');

print "CGI2"."
\n";

CGI2


#!/usr/local/bin/perl
use strict;
use CGI::Carp qw(fatalsToBrowser);

use lib qw(../extlib);
use Walrus::Session::Lite;

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

my $session_id = 'ここにCGI1でのセッションID';
my $session_dir = './session/';

my %session;
tie(%session, 'Walrus::Session::Lite', $session_dir, $session_id);
print "index2.cgi"."
\n";
print $session{'id'}."
\n";

という感じです。
CGI1からCGI2に遷移しても、上記の例では「test」と表示されたのではないかと思います。というわけで、CGIでもセッションは使えると。