[Perl] => [CGI]


この日記のはてなブックマーク数 このエントリーを含むはてなブックマーク

セッション管理を行うにはCGI::Sessionモジュールを使用します。その際、CGIモジュールも使用します。


[使用例]

#!/usr/bin/perl
use CGI;

# -ip-matchスイッチで、セッションを作成したホストと、セッションを取得するホストが同一IPであるかどうかをチェックします。
use CGI::Session qw/-ip-match/;


#既存のセッションIDをクッキーとクエリーストリングから取得します。デフォルトではCGISESSIDという名前で探しますが、 CGI::Session->name()にて名前を指定できます。セッションIDが見つからない場合には、新たにセッションを作成します。
my $cgi = new CGI;
CGI::Session->name("SESSION_ID");
my $session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'});


#ヘッダーを出力します。セッションクッキーがセットされます。
print $session->header(-charset=>'EUC-JP');

#セッションIDを出力
print $session->id();


#セッションに情報を保存するにはparam()を使用します。値はスカラーの他、配列などの値を保存する際にはリファレンスにしてください。
$session->param("値", $value);


#セッションに情報がうまく保存されない場合、flush()を呼び出すとよい
$session->flush();


#セッションから値を取り出す場合も同様にしてparam()を使用。
$session_value = $session->param("値");


#セッションから一括で値を取り出すにはdata_ref()を使用します。古いCGI::Sessionではparam_hashref()
$session_allparam = $session->data_ref;


#cgiのパラメータを一括してセッションに保存するにはsave_param()にcgiオブジェクトを渡します。
$session->save_param($cgi);


#セッションをクローズするにはundefします。クローズしただけではデータは消えません。
undef($session);


#特定のデータを削除するにはclear()を使用。
$session->clear(["specific_data"]);


#セッションをディスクから永遠に削除するにはdelete()を使用。
$session->delete();


[補足]
セッションクッキーはブラウザを閉じると利用できなくなるため、一定時間セッションを保持したい場合には以下のようにして、クッキーを作成後ヘッダーを出力してください。


my $cookie = $cgi->cookie(
-name => 'SESSION_ID',
-value => $session->id(),
-expires => '+1h',
-path => '/cgi-bin/',
-domain => 'www.ksknet.net',
);


print $cgi->header(
-type => 'text/html',
-charset => 'EUC-JP',
-cookie => $cookie
);




関連記事
HTML::Template
Apache::ASP
CGI::Session - セッション管理
CGI - ヘッダーを出力する
シェルからCGIにパラメータを渡す
radio_group - ラジオボタンを表示
checkbox_group() - チェックボックスを表示する
エラーをブラウザーに表示するには - CGI::Debug
URLエンコードするには
リダイレクト
popup_menu - HTMLの選択フィールドを表示する
キャッシュを無効にするには
CGI::Cookie - クッキーの取得及び設置
CGIモジュール - フォームの値を取得
広告