CGIでセッションを使用する

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use CGI::Cookie;
use CGI::Session; 

my $q = CGI->new;

# セッションIDを取得
my $sid = $q->param("CGISESSID") || undef;

# セッションIDからCGI::Sessionオブジェクトを作成
my $session = CGI::Session->new(undef, $sid, {Directory => "./tmp"});

# セッションから任意のデータを取り出す
my $count = $session->param("count") || 0;
$count++;

# セッションにデータを保存
$session->param("count", $count);

# セッションIDをCookieで送信
print $q->header(
    -cookie => CGI::Cookie->new(CGISESSID => $session->id())
);
print $count;


セッションIDの変わりにCGIオブジェクトを渡して、ヘッダの出力をCGI::Sessionにやらせると、セッションIDの管理を自動化できる。

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
use CGI::Cookie;
use CGI::Session; 

my $q = CGI->new;

# CGIオブジェクトからCGISESSIDというCookieを読み取り、それをセッションIDとして使う
my $session = CGI::Session->new(undef, $q, {Directory => "./tmp"});

my $count = $session->param("count") || 0;
$count++;

$session->param("count", $count);

# CGISESSIDというCookieにセッションIDを出力
print $session->header;
print $count;