ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

Perlでセッションを使う その1:クッキーを利用(セッションIDを入れる)。


 Perlでセッションを使うのにCGI::Sessionを使うって、えらい昔に書いておいて、そのまんまだった気がするので、今日は、実際に、CGI::Sessionを使って、Perlでセッションを使ってみたいと思います。

 っていっても、2とおりあって、セッションIDをCookieに入れてしまうのと、そうでない方法(POSTやGetで引数として渡すなどなど)があるのですが、今回は、CookieにセッションIDを入れる方法をやって、次回、その2で、そうでない方法のほうをやりたいと思います。




■1:CGI::Sessionを入手する

CPANのここ
http://search.cpan.org/~markstos/CGI-Session-4.20/lib/CGI/Session.pm
にいくと、CGI-Session-4.20があって、右よこに、
Download: CGI-Session-4.20.tar.gz
ってかいてあるので、そこをクリック。

 適当な解凍ソフトを使って解凍すると、libのなかにCGIがあって、その中にSession.pmというファイルとSessionフォルダがある。
 そこでそれを、perlの入っているフォルダのlibがあるフォルダに入れるんだけど、
 すでにCGIっていうフォルダがあれば(CGIをperlで組んでいれば、たいていある)、そのCGIの下に解凍したSession.pmというファイルとSessionフォルダを入れる。
(なきゃ作る。。。より、CGIを入れたほうがいいと思う ^^;)


 本当は、もっとかんかんにインストールする方法があるんだろうけど、ま、これでできるからいいか(^^;)
 もっと、ちゃんとした方法を知ってる人は、その方法でやって、とにかく、CGI::Sessionを落としてきてくださいませ。。




■今回の課題

 で、こんなものをつくります。
 ブラウザからアクセスすると。。

 1行目に、セッションIDを表示し、

 2行目に、アクセスするたびごとに1あがる
 しかし、10になるとセッション自体を削除する
   =>セッションIDがかわり、また1から。。
 となる。

 3行目は、とびとびに1が出たり出なかったりする
 (1をセッションにセット、次クリックされると、
  セッションのその項目をクリアするので、飛び飛びに出る)

 というものをつくります




■ソース

 今回、

 1行目のセッションIDは$sidに、
 2行目の10までの数字は、$kaisu_valに、
 3行目のとびとびの数字は、$tobitobiに

 入れています。

 で、以下ソースです。

#!C:/Perl/bin/perl
#################################################
#					  #
#	セッションのテスト			  #
#	Cookieを利用する場合		  #
#					  #
#################################################

use CGI;
use CGI::Session;

				#################################
				#	セッション開始	     #
				#################################
$cgi = new CGI;
$session = new CGI::Session("driver:File", $cgi, {Directory=>'./session'});

#Cookieを使うため、ヘッダーをここで受け取っておく、
#(操作中にsessionを削除するのでここで受け取る)
$header	= $session->header();

				#################################
				#	セッションの操作	    #
				#################################
#セッションIDを受け取ってみる
$sid =  $session->id();

#kaisuから値を取得、1足して
$kaisu_val = $session->param("kaisu");
$kaisu_val++;

#10まできたら、このセッションを消す。10未満なら追加
if ( $kaisu_val	==	10 )
{
	$session->delete();
}
else
{
	$session->param("kaisu",$kaisu_val);
}

#偶数ならtobitobiセット、奇数なら、この項目(のみ)削除
$tobitobi = $session->param("tobitobi");
if ( $kaisu_val %2	==	0 )
{
	$tobitobi = $session->param("tobitobi",1);
}
else
{
	$tobitobi = $session->clear("tobitobi");
}


				#################################
				#	出力		    #
				#################################
#うけとったヘッダーを書き出す。
#普通、print "Content-Type: text/html¥n¥n";と書くが、その代わり。
#Cookie部分に、セッションIDが入ってるところが違う

print $header;

# あとは、内容を好き勝手に書く
print "$sid¥n";
print "$kaisu_val¥n";
print "$tobitobi¥n";

(上記 < > ¥ は、本当は半角です
 Windows上で、ActivePerlを使ってCGIをやってます)