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をやってます)
