Object Oriented Perl DocumentWorkSpace

Object Oriented Perl DocumentWorkSpace Links

Ⅵ.Perl CGI PROGAMMING[COOKIE]

1.クッキー文字列の書式

●クッキー名=値;expores=値;domain=値;path=値;secure 掲示板などで二度目に訪問した際に前回入力したデータ(名前/住所)があらかじめフォームに入っている場合があります。これはクッキー(Cookie)という仕組みを使って、ユーザーのパソコンに書き込み情報を保存しておき、次に訪問した時にその情報を読みこみでフォームに表示させています。クッキーの書式は次のとおりです。
クッキー名=値lexpores=値;domain=値;path=値;secure
①クッキー名=値 クッキに覚えさせるデータ部分です。クッキー名は自由につけてかまいません。覚えさせたクッキーを呼び出す際には、このクッキー名を使います。=の後に覚えさせたい値を書きます。クッキー名と値の区切り文字は=ですので、値の中に=を使うことはありません。 ②expire=値 クッキーの有効期限を指定します。指定した有効期限がくるとそのクッキーは無効とみなされ保存されなくなります。融合期限の書式は曜日、日-月-年 時:分:秒時間帯で、次のようになります。曜日の部分はMON、Wedのように省略形で書いてもかまいません。 Wednesday,1-Sep-2020 00:00:00 クリニッジ標準時の2020年9月1日水曜日 0時0分0秒まで有効 ③domain=値 このクッキーを発行したサーバーのドメイン名を指定します。省略すると自動で名前が入ります。 ④path=値 このクッキーが有効なURLパスの範囲を指定します。省略すると値は/mになり、そのサイト全体で有効になります。 http://aaa.bbb.com/ddd/でdomain="/"とすると、http://aaa.bbb.com/内でこのクッキーは有効となります。 ⑤secure サーバーとの接続がセキュアであるときのみクッキーが送信されます。 例 クッキー名:bbscookie 値:name:ikeda 有効期限:2003年3月1日土曜日0時0分0秒
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
# !/use/bin/perl
use lib::util;
use 'jcode.pl';
use CGI;

##メインプログラム
# !/use/bin/perl
use lib::util;
use 'jcode.pl';
use CGI;

##メインプログラム
if($ENV{'HTTP_COOKIE'}){
	*data=getCookie($ENV{'HTTP_COOKIE'});
	$count=$data{'Count'};
	$count++;
}
else{
	$count=0;
}

##ヘッダーに追加する書式
#set-cookie:count=$count/; expires=$ENV{'DATE}+1minutes/;
#path/; domani/; secure/

print <<EO;

Content-type:text/html
Set-Cookie:Count=$count;

<HTML>
<HEAD>
<title>テストCookieプログラム</title>
</head>
<body>
Count:$count<BR>
<Form ACTION>="/cgi-bin/cookie.cgi" method="post">
<input type="submit" value="next">
</form>
</body>
</html>
EO

exit(0);

sub getCookie
{
	local($cookie)=$ENV{'HTTP_COOKIE'};
	@cookie=split(//,$cookie);
	
	foreach(@cookie){
		local($name,$val)=split(/=/);
		$data{$name}=$val;
	}
	return *data;
}
#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#

2.CGIでクッキーを覚えさせる

●Set-Cookie:ヘッダーをHTML表示部分に追加 CGIでHTMLを表示する場合、Content-type:text/htmlヘッダの後に次の文を追加します。 Set-Cookie:クッキー文字列 クッキーを作成する流れは次のとおり。 ①変数名の値の文字列をセット まず書く変数名=値という文字列を作ります。この例では名前、メールアドレス、色番号の3種類です。
$c_name="name=$name";
$c_mail="mail=$mail";
$c_color="color=$color";
②Enc_Sep_Code文字列を接続 次のこの3つをEnc_Sep_Codeという文字で接続します。ここのポイントはつなぐ記号は=ではなく、Enc_Sep_Codeという文字列であるという点です。
$C_line=join('Enc_Sep_Code',$c_name,$c_main,$c_color);
③=,と;記号をEnc_Ea_CodeとEnc_Colon_Codeに変換します。=はクッキー名=値の区切り文字ですので、値の中では使用しません。また、;は次のexpireとの区切り文字ですのでこちらも別の文字列に変換しておきます。
$c_line=~ s/=/Enc_Eq_Code/g;
#=をEnc_Eq_Codeに変換する。
$c_line=~ s/=/Enc_Colon_Code/g;
#;をEnc_Colon_Codeに変換
④クッキー名=値;expires=有効期限という文字列を作成します。
$c_line="cookietest=\c_line\;expires=sat,1-1-2018 00:00:00 GMT";
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl
use CGI qw(:standard);
require 'jcode.pl';

$CgiURL='cookie.cgi';

#フォームから入力された値を得ます。
$name=param('name');  #名前
&jcode::convert(*name,'euc');#EUCコードに変換
$mail=param('mail');#メールアドレス
$color=param('color');#好きな色の番号
$color--;

if($color>=0){
	#もし色番号が選択されていれば
	@color=('赤','黄','青','緑','オレンジ');
	$colorname=$COLOR[$color]; #色番号を色名に変換する
}

####クッキー文字列の作成
#変数名=値という文字列を作る

$c_name="name=$name";
$c_mail="mail=$mail";
$c_color="color=$color";

#各文字列をEnc_Sep_Codeという文字列でつなぐ

$c_line=join('Enc_Sep_Code',$c_name,$c_mail,$c_color);

#$c_lineに含まれる=,と;記号を別の文字列に変換する。
$c_line=~ s/=/Enc_Eq_Code/g; #=をEnc_Eq_Codeに変換
$c_line=~ s/;/Enc_Colon_Code/g; #;をEnc_Colon_Codeに変換

$c_line="cookietest=\c_line\;expires=sat,1-1-2018 00:00:00 GMT";

################################################
#HTML表示
print <<"IO";
Content-Type:text/html
Set-Cookie:$c_line

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="Set-Cookie" content="cookietest=visit_page:top;expires=sat,1-1-2016 00:00:00 GMT">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>クッキーテストプログラム</title>
</head>
<body text="#000080" bgcolor="#FFFFFF">
<h1>クッキーテストプログラム version1.0.0</h1>
<form action="$CgiURL" method="post">
<table>
<tr>
<td>Name</td>
<td><input type="text" size="20" name="name"></td>
</tr>
<tr>
<td>Mail-Address</td>
<td><input type="text" size="20" name="mail">
</td>
</tr>
<td>Favoite Color</td>
<td>
<input type="radio" name="color" value="1">赤
<input type="radio" name="color" value="2">黄
<input type="radio" name="color" value="3">青
<input type="radio" name="color" value="4">緑
<input type="radio" name="color" value="5">オレンジ
</td>
</tr>
<td colospan="2" align="center">
<input type="submit" value="クッキーをセットします">
</td>
</tr>
</table>
</form>

次のCOOKIEがSETされました。<br><br>

IO

#入力されたデータを表示
print"名前:$name<br>\n" if($name);
print"メールアドレス:$mail<br>\n" if($mail);
print"好きな色は:$colorname<br>\n" if($colorname);

print<<"IO";
</body>
</html>
IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

3.HTMLでクッキーを覚えさせる

●metaタグでクッキーを記入する CGI以外のページを閲覧した場合でも、クッキーを記憶させたい場合にはmetaタグを使います。 metaタグの書式はヘッダー名にSet-Cookieを、値にクッキー文字列を書きます。

4.JavaScriptで動的にクッキーの値を保存

●document.cookie="値" HTMLにmetaタグを使ってクッキーを記憶させる場合は常に同じ値しか与えることができません。JavaScriptを使うことで訪問時間など、動的にデータを記憶させることができるようになります。書式は、値の部分にクッキー文字列を書きます。 document.cookie="値" visit_time:訪問時間というクッキーを記憶させます。
<script Language="JavaScript">
<!--
dd=new Data();
VisitTime=dd.getTime();

document.cookie="cookietest=visit_time;"+VisitTime+"\; expires=Sat,1-Mar-2017 00:00:00 GMT";
document.write("クッキー名:cookietest<br>値:visit_time:"+VisitTime+"<br><br>\n";

//--!>
</script>

5.クッキーの値をCGIで読み込む

●$ENV{'HTTP_COOKIE'}の値を読み込み ユーザーがCGIにアクセスすると、そのパス(URL)で有効なクッキーがサーバーに送信されます。送信されたクッキーは環境変数$ENV{'HTTP_COOKIE'}から取り出すことができます。
@pairs=split(/\;/,$ENV{'HTTP_COOKIE'});
foreach $pairs(@pairs){
($cname,$cvalue)=split(/\=/,$pair);
$cname=~ s/Enc_Eq_Code/\=/g;
$cvalue=~ s/Enc_Eq_Code/\=/g;
$cname=~ s/ //g;
$COOKIES{$cname}=$cvalue;
} ①ハッシュに取り込み ひとつのサイトにいくつものクッキーがセットされている場合があるため、まずすべての有効なクッキーを次のようなハッシュにいれます。 $COOKIES{クッキー名}=値 ②配列に分割 各クッキーは、;区切りで$ENV{'HTTP_COOKIE'}に入ってますので次のようにまず;で分割し、@pairs配列にいれます。 @pairs=split(/\;/,$ENV{'HTTP_COOKIE'}); ③名前と値を分割 クッキーはクッキー名=値という形式であるためクッキー名と値に分割します。 ($cname,$cvalue)=split(/\=/,$pair); ④変換した文字列を元に戻す クッキーに保存したときに=をEnc_Eq_Codeに変換したのでそれを元に戻します。 $cname=~ s/Enc_Eq_Code/\=/g; $cvalue=~ s/Enc_Eq_Code/\=/g; ⑤値を代入 $COOKIES{クッキー名}に値を代入します。 $COOKIES{$cname}=$cvalue; ⑥COOKIEハッシュから値を取出す 次に%COOKIESハッシュから必要な値を取り出します。この例ではクッキー名は'cookietest'であるため、必要な値は$COOKIES{'cookietest'}に入っています。 またクッキーの値は次のようになっています。
nameEnc_Eq_Code名前Enc_Sep_CodemailEnc_Eq_CodeメールアドレスEnc_Sep_CodecolorEnc_Eq_Code色番号
もし名前に;が使われていればEnc_Colon_Codeに変換されています。 これを元に戻します。 foreach (split(/Enq_Sep_Code/,$COOKIES{'cookietest'})){ ($cname,$cvalue)=split(/\=/); $cname=~ s/Enc_Colon_Code/\;/g; $cvalue=~ s/Enc_Colon_Code/\;/g; &jcode::convert(*cvalue,'euc'); $COOKIE{$cname}=$cvalue; } foreach(split(/Enc_Sep_Code/,$COOKIES{'cookietest'})){ ⑦変数と値に分割 $COOKIES{'cookietest'}をEnq_Sep_Codeで切り分けて、それぞれの変数名=値ごとに処理を行います。 ($cname,$cvalue)=split(/\=/); ⑧Enc_Colon_Codeを;に変換 $cname=~ s/Enc_Colon_Code/\;/g; $cvalue=~ s/Enc_Colon_Code/\;/g; ⑨文字コードをEUCに変換 &jcode::convert(*cvalue,'euc'); ⑩$COOKIE{変数名}に値を代入 $COOKIES{$cname}=$cvalue; この結果。$COOKIE{'name'}に名前、$COOKIE{'mail'}にメールアドレス、$COOKIE{'color'}に色番号が入ります。 次のプログラムは入力されたデータをクッキーにセットし、現在のクッキーを表示します。 リロードすると前にセットしたクッキーが表示されます。

6.CGI::Cookieモジュール

6-1.CGI::Cookieモジュールで値の設定

CGI::Cookieを使うと、簡単にクッキーの値を設定することができます。
$NewCookie=new CGI::Cookie(-name=>'test',-value=>"$time",-expires=>'hursday,31-Dec-2018 00:00:00 JST');
次の要素を指定します。
-name:クッキーの名前
-value:値
-expires:有効期限
-path:パス
-domain:有効ドメイン名
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl

use CGI::Cookie;
$time=time;

#-name:クッキーの名前
#-value:値
#-expires:有効期限
#-path:パス
#-domain:有効ドメイン名
$NewCookie=new CGI::Cookie(-name=>'CookieName',-value=>"$time",-expires=>'Thursday,31-Sep-2016 00:00:00 JST',-path=>'PATH',-domain=>'有効ドメイン');

print <<"IO";
Content-type:text/html
Set-Cookie:$NewCookie

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>クッキーテストプログラム</title>
</head>
<body>
<h1>クッキーテストプログラム version1.3.0</h1>
<br>
<p>
NewCookie(値をセットしたクッキーセット) : $NewCookie<br>
NowCookie (現在のクッキー)): $ENV{'HTTP_COOKIE'}
<br>
</p>
</body>
</html>
IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
6-2.CGI::Cookieモジュールでクッキーを得る ●CGI::Cookie fetch関数 fetch CGI::Cookieでセットされたクッキー文字列を次のようにクッキー名をキーにしたハッシュとして得ることができます。
%cookies=fetch CGI::Cookie;
$cookie=$cookies{'test'};
$cookieからvalueの値だけを取り出すには次のようにします。
$cookie->{'value'}->[0];
次の文はアクセスした時間をセットするプログラムです。NewValueがクッキーにセットされる値、NowValueが前回クッキーにセットされた値です。
#!/usr/bin/perl

use CGI::Cookie;

$time=time;

#クッキーの値を取り出す。
%oldCookies=fetch CGI::Cookie;
$cookie=$OldCookies('test');
#クッキーからvalueの値をとりだす
<pre>$oldvalue=$cookie->{'value'}->{0};</pre>

#今回セットするクッキーを作成
$newCookie=new CGI::Cookie(-name=>'test',-value->"$time",-expires->'Thursday,31-Dec-2016 00:00:00 JST');

print<<"IO";
Content-type:text/html
Set-Cookie:$NewCookie

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>クッキーテストプログラム</title>
</head>
<body>
<h1>クッキーテストプログラム version1.3.0</h1>
<br>
<p>
NewCookie(値をセットしたクッキーセット) : $NewCookie<br>
NowCookie (現在のクッキー)): $ENV{'HTTP_COOKIE'}
<br>
</p>
</body>
</html>
IO
exit;

6-3.CGI::Cookieを使って複数の値をクッキーから取得

●無名配列 クッキーの値をセットする-valueに[]で囲んだリストを渡すと、それらの値が、&区切りでセットされます。
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!usr/bin/perl

use CGI qw(:standard);
use CGI::Cookie;
require 'jcode.pl';

$time=time;

#フォームから文字列を得る
$text1=param('text1');
$text2=param('text2');
&jcode::convert(*text1,'euc');
&jcode::convert(*text2,'euc');

#クッキーの値を取り出す
%OldCookies=fetch CGI::Cookie;
$cookie=$OldCookies{'test'};
$ctext1=$cookie->{'value'}->[0];
$ctext2=$cookie->{'value'}->[1];
$ctime=$cookie->{'value'}->[2];

#今回セットするクッキーを作成
$NewCookie=new CGI::Cookie(-name=>'test',-value=>["$text1","$text2","$time"],
-expires=>'Thursday,31-Sep-2016 00:00:00 JST');

print <<"IO";
Content-type:text/html
Set-Cookie:$NewCookie

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>クッキーテストプログラム</title>
</head>
<body>
<h1>クッキーテストプログラム version1.5.0</h1>
<div class="profile" style="text-align:center;"><form action="cookie5.cgi" method="post">
text1:<input type="text" name="text1" size="20"><br>
text2:<input type="text" name="text2" size="20"><br>
<input type="submit" value="SET"style="width:100px;margin:2px;">
</form></div>
<form action ="cookie5.cgi" method="post" style="width:100px;margin:2px;">
<input type="submit" value="next" style="width:100px;margin:2px;">
</form>
NewCookie :$text1/$text2/$time
NowCookie : $ctext1/$ctext2/$ctime
</p>
</body>
</html>
IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

6-4.CGI::Cookieを使って複数のクッキーをセット

●複数の名前のクッキーを作成し、それらを全てセット リピータ調査などの目的でサイト全体のページ用のクッキーを設定しているとき、それとは別に掲示板用のクッキーを使いたい場合はそれらを別々のクッキーとして保存します。複数のクッキーを保存させるには複数のクッキー文字列を作成して、それぞれにSet-Cookieを行います。
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Cookie;
require 'jcode.pl';

#クッキーの値を取り出す。
%OldCookies=fetch CGI::Cookie;
#Cookie1の値
$cookie1=$OldCookies{'Cookie1'};
$ctext11=$cookie1->{'value'}->[0];
$ctext12=$cookie1->{'value'}->[1];
$ctext13=$cookie1->{'value'}->[2];
#Cookie2の値
$cookie2=$OldCookies{'Cookie2'};
$ctext21=$cookie2->{'value'}->[0];
$ctext22=$cookie2->{'value'}->[1];
$ctext23=$cookie2->{'value'}->[2];
#Cookie3の値
$cookie3=$OldCookies{'Cookie3'};
$ctext31=$cookie3->{'value'}->[0];
$ctext32=$cookie3->{'value'}->[1];
$ctext33=$cookie3->{'value'}->[2];

#今回セットするクッキーを作成
#フォームから入力文字列を得る
$text11=param('text11');
$text12=param('text12');
$text13=param('text13');

$text21=param('text21');
$text22=param('text22');
$text23=param('text23');

$text31=param('text31');
$text32=param('text32');
$text33=param('text33');

&jcode::convert(*text11,'euc');
&jcode::convert(*text12,'euc');
&jcode::convert(*text13,'euc');

&jcode::convert(*text21,'euc');
&jcode::convert(*text22,'euc');
&jcode::convert(*text23,'euc');

&jcode::convert(*text31,'euc');
&jcode::convert(*text32,'euc');
&jcode::convert(*text33,'euc');

$NewCookie1=new CGI::Cookie(-name=>'Cookie1',-value=>["$text11","$text12","$text13"],-expires=>'Thursday,31-Sep-2016 00:00:00 JST');
$NewCookie2=new CGI::Cookie(-name=>'Cookie2',-value=>["$text21","$text22","$text23"],-expires=>'Thursday,31-Nov-2020 00:00:00 JST');
$NewCookie3=new CGI::Cookie(-name=>'Cookie3',-value=>["$text31","$text32","$text33"],-expires=>'Thursday,31-Dep-2024 00:00:00 JST');

print <<"IO";
Content-type:text/html
Set-Cookie:$NewCookie1
Set-Cookie:$NewCookie2
Set-Cookie:$NewCookie3

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>CGI::Cookie</title>
</head>
<body>
<h1>クッキーテストプログラム version1.6.0</h1>
<form action="cookie6.cgi" method="post">
<div><div style="float:left;margin-left:10px;margin-bottom:15px;">
<h5>COOKIE SETTING1</h5>
NewCookie1{value[0]} : <input type="text" name="text11" size="20"  style="margin:5px;width:180px;"><br>
NewCookie1{value[1]} : <input type="text" name="text12" size="20"  style="margin:5px;width:180px;"><br>
NewCookie1{value[2]} : <input type="text" name="text13" size="20"  style="margin:5px;width:180px;"><br></div>
<div style="float:left;margin-left:10px;margin-bottom:15px;">
<h5>COOKIE SETTING2</h5>
NewCookie2{value[0]} : <input type="text" name="text21" size="20" style="margin:5px;width:180px;"><br>
NewCookie2{value[1]} : <input type="text" name="text22" size="20" style="margin:5px;width:180px;"><br>
NewCookie2{value[2]} : <input type="text" name="text23" size="20" style="margin:5px;width:180px;"><br></div>
<div style="float:left;margin-left:10px;margin-bottom:15px;">
<h5>COOKIE SETTING3</h5>
NewCookie3{value[0]} : <input type="text" name="text31" size="20" style="margin:5px;width:180px;"><br>
NewCookie3{value[1]} : <input type="text" name="text32" size="20" style="margin:5px;width:180px;"><br>
NewCookie3{value[2]} : <input type="text" name="text33" size="20" style="margin:5px;width:180px;"><br></div>
</div>
<br>
<input type="submit" value="COOKIE SET" style="width:150px;">
</form></div>
<h5>COOKIE NOW</h5>
Cookie1 : $ctext11<br>
Cookie2 : $ctext21<br>
Cookie3 : $ctext31<br>
<br>
<h5>SET COOKIE</h5>
CookieSET1 : $NewCookie1<br>
CookieSET2 : $NewCookie2<br>
CookieSET3 : $NewCookie3<br>
<br>
</body>
</html>

IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

6-5.HEADERにCOOKIEをSET

CGIモジュールを使ってCOOKIEの値をヘッダーにセットにします。次のようにオプションに指定します。 print header(-type=>'text/html',-charset=>'UTF-8',-cookie=>$NewCookie); クッキーが複数の場合は次のとおり print header(-type=>'text/html',-charset=>'UTF-8',-cookie=>[$NewCookie1,$NewCookie2,$NewCookie3]);
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl

use CGI qw(:standard);
use CGI::Cookie;
require 'jcode.pl';

$time=time;

#フォームからの入力文字列を得る
$text1=param('text1');
$text2=param('text2');
&jcode::convert(*text1,'euc');
&jcode::convert(*text2,'euc');

#COOKIEの値を取り出す
%OldCookies=fetch CGI::Cookie;
$cookie=$OldCookies{'COOKIE_PROGRAM'};
$ctext1=$cookie->{'value'}->[0];
$ctext2=$cookie->{'value'}->[1];
$ctime=$cookie->{'value'}->[2];

#今回セットするクッキーを作成
$NewCookie=new CGI::Cookie(-name=>'COOKIE_PROGRAM',-value=>["$text1","$text2","$time"],-expires=>'Thursday,31-Sep-2018 00:00:00 JST');
#CGIモジュールを使ってヘッダを表示する
print header(-type=>'text/html',-charset=>'UTF-8',-cookie=>$NewCookie);

print <<"IO";
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>CGI::Cookie</title>
</head>
<body>
<h1>クッキーテストプログラム version1.7.0</h1>
<form action="cookie7.cgi" method="post">
<div><div style="float:left;margin-left:10px;margin-bottom:15px;">
<h5>COOKIE SETTING</h5>
NewCookie1{value[0]} : <input type="text" name="text1" size="20"  style="margin:5px;width:180px;"><br>
NewCookie1{value[1]} : <input type="text" name="text2" size="20"  style="margin:5px;width:180px;"><br>
</div>
<br style="clear:both;">
<input type="submit" value="COOKIE SET" style="width:150px;">
</form></div><br>
<h5>COOKIE SET</h5>
NewValues : $text1 / $text2 / $time <br><br>
NowValues : $ctext1 / $ctext2 / $ctime
<br>
</body>
</html>

IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

6-6.設定された環境変数一覧を表示

CGI環境変数を得るには%ENVの内容をブラウザに表示させます。ブラウザに表示させるには次の文で%ENVのキーをすべて得て値を表示させます。
@keys=keys %ENV;
@key=sort @keys;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#/!usr/bin/perl
#環境変数一覧を表示する

@keys=keys $ENV; #%ENVのキーをすべて得る
@keys=sort @keys; #キーをソート
print header( -type=>'text/html',-charset=>'UTC-8');

print <<"IO";
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../quest/stylesheet.css" >
<title>環境変数プログラム</title>
</head>
<body>
<h1>環境変数プログラム version1.0.0</h1>

<table border=1>

IO
#キー順に%ENVの値を表示
foreach $key(@keys){

print <<"IO";
<tr>
<td>$key</td>
</tr>
IO
}

print <<"IO";
</table>
</body></html>
IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$