Object Oriented Perl DocumentWorkSpace

 Object Oriented Perl DocumentWorkSpace>>


<<CONTACT>>

下記フォームに必要事項を入力後、確認ボタンを押してください。

お問い合わせ内容
お名前 ※必須
電話番号(半角)
Mail(半角) ※必須
性別 男 
サイトを知ったきっかけ 友人・知人  検索エンジン
お問い合わせ内容

 

Ⅵ.Perl CGI PROGAMMING[COOKIE]

1.Cookie文字列の書式

 掲示板などで二度目に訪問した際に前回入力したデータ(名前/住所)があらかじめフォームに入っている場合があります。これはCookie(Cookie)という仕組みを使って、ユーザーのパソコンに書き込み情報を保存しておき、次に訪問した時にその情報を読みこみでフォームに表示させています。Cookieの書式は次のとおりです。

Cookie名=値lexpores=値;domain=値;path=値;secure
① Cookie名=値  Cookieに覚えさせるデータ部分です。Cookie名は自由につけてかまいません。覚えさせたCookieを呼び出す際には、このCookie名を使います。=の後に覚えさせたい値を書きます。Cookie名と値の区切り文字は=ですので、値の中に=を使うことはありません。 ② expire=値  Cookieの有効期限を指定します。指定した有効期限がくるとそのCookieは無効とみなされ保存されなくなります。融合期限の書式は曜日、日-月-年 時:分:秒時間帯で、次のようになります。曜日の部分はMON、Wedのように省略形で書いてもかまいません。
Wednesday,1-Sep-2020 00:00:00 クリニッジ標準時の2020年9月1日水曜日 0時0分0秒まで有効
③ domain=値  このCookieを発行したサーバーのドメイン名を指定します。省略すると自動で名前が入ります。 ④ path=値  このCookieが有効なURLパスの範囲を指定します。省略すると値は/mになり、そのサイト全体で有効になります。http://aaa.bbb.com/ddd/でdomain="/"とすると、http://aaa.bbb.com/内でこのCookieは有効となります。 ⑤ secure  サーバーとの接続がセキュアであるときのみCookieが送信されます。
[例] Cookie名: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.Cookieプログラミング

 CGIでHTMLを表示する場合、Content-type:text/htmlヘッダの後に次の文を追加します。  ● Set-Cookie:Cookie文字列  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に変換  =,と;記号をEnc_Ea_CodeとEnc_Colon_Codeに変換します。=はCookie名=値の区切り文字ですので、値の中では使用しません。また、;は次のexpireとの区切り文字ですのでこちらも別の文字列に変換しておきます。
$c_line=~ s/=/Enc_Eq_Code/g;
#=をEnc_Eq_Codeに変換する。
$c_line=~ s/=/Enc_Colon_Code/g;
#;をEnc_Colon_Codeに変換
④ Cookie名=値;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]; #色番号を色名に変換する
}

####Cookie文字列の作成
#変数名=値という文字列を作る

$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>Cookieテストプログラム</title>
</head>
<body text="#000080" bgcolor="#FFFFFF">
<h1>Cookieテストプログラム 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="Cookieをセットします">
</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でCookieをセット

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

4.JavaScriptで動的にCookieの値を保存

 HTMLにmetaタグを使ってCookieを記憶させる場合は常に同じ値しか与えることができません。JavaScriptを使うことで訪問時間など、動的にデータを記憶させることができるようになります。書式は、値の部分にCookie文字列を書きます。  ● document.cookie="値" visit_time:訪問時間というCookieを記憶させるプログラムです。

<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("Cookie名:cookietest<br>値:visit_time:"+VisitTime+"<br><br>\n";

//--!>
</script>

5.Cookieの値をCGIで読み込む

 ユーザーがCGIにアクセスすると、そのパス(URL)で有効なCookieがサーバーに送信されます。送信されたCookieは環境変数$ENV{'HTTP_COOKIE'}から取り出すことができます。 ● $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;
} ① ハッシュに取り込み  ひとつのサイトにいくつものCookieがセットされている場合があるため、まずすべての有効なCookieを次のようなハッシュにいれます。  ● $COOKIES{Cookie名}=値 ② 配列に分割  各Cookieは、;区切りで$ENV{'HTTP_COOKIE'}に入ってますので次のようにまず;で分割し、@pairs配列にいれます。  ● @pairs=split(/\;/,$ENV{'HTTP_COOKIE'}); ③ 名前と値を分割  CookieはCookie名=値という形式であるためCookie名と値に分割します。  ● ($cname,$cvalue)=split(/\=/,$pair); ④ 変換した文字列を元に戻す  Cookieに保存したときに=をEnc_Eq_Codeに変換したのでそれを元に戻します。  ● $cname=~ s/Enc_Eq_Code/\=/g;  ● $cvalue=~ s/Enc_Eq_Code/\=/g; ⑤ 値を代入  $COOKIES{Cookie名}に値を代入します。  ● $COOKIES{$cname}=$cvalue; ⑥ COOKIEハッシュから値を取出す  次に%COOKIESハッシュから必要な値を取り出します。この例ではCookie名は'cookietest'であるため、必要な値は$COOKIES{'cookietest'}に入っています。Cookieの値は次のようになっています。
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'}に色番号が入ります。次のプログラムは入力されたデータをCookieにセットし、現在のCookieを表示します。リロードすると前にセットしたCookieが表示されます。

6.CGI::Cookieモジュール

Ⅰ.CGI::Cookieモジュールで値を設定

 CGI::Cookieを使うと簡単にCookieの値を設定することができます。

$NewCookie=new CGI::Cookie(-name=>'test',-value=>"$time",-expires=>'hursday,31-Dec-2018 00:00:00 JST');
次の要素を指定します。
-name:Cookieの名前
-value:値
-expires:有効期限
-path:パス
-domain:有効ドメイン名
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl

use CGI::Cookie;
$time=time;

#-name:Cookieの名前
#-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>Cookieテストプログラム</title>
</head>
<body>
<h1>Cookieテストプログラム version1.3.0</h1>
<br>
<p>
NewCookie(値をセットしたCookieセット) : $NewCookie<br>
NowCookie (現在のCookie)): $ENV{'HTTP_COOKIE'}
<br>
</p>
</body>
</html>
IO
exit;
#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

Ⅱ.CGI::CookieモジュールでCookie値を取得

fetch CGI::CookieでセットされたCookie文字列を次のようにCookie名をキーにしたハッシュとして得ることができます。  ● CGI::Cookie fetch関数
%cookies=fetch CGI::Cookie;
$cookie=$cookies{'test'};
$cookieからvalueの値だけを取り出すには次のようにします。
$cookie->{'value'}->[0];
次の文はアクセスした時間をセットするプログラムです。NewValueがCookieにセットされる値、NowValueが前回Cookieにセットされた値です。
#!/usr/bin/perl

use CGI::Cookie;

$time=time;

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

#今回セットするCookieを作成
$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>Cookieテストプログラム</title>
</head>
<body>
<h1>Cookieテストプログラム version1.3.0</h1>
<br>
<p>
NewCookie(値をセットしたCookieセット) : $NewCookie<br>
NowCookie (現在のCookie)): $ENV{'HTTP_COOKIE'}
<br>
</p>
</body>
</html>
IO
exit;

Ⅲ.CGI::Cookieを使って複数の値をCookieから取得

 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');

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

#今回セットするCookieを作成
$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>Cookieテストプログラム</title>
</head>
<body>
<h1>Cookieテストプログラム 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]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

ⅣCGI::Cookieを使って複数のCookieをセット

 リピータ調査などの目的でサイト全体のページ用のCookieを設定しているとき、それとは別に掲示板用のCookieを使いたい場合はそれらを別々のCookieとして保存します。複数のCookieを保存させるには複数のCookie文字列を作成して、それぞれにSet-Cookieを行います。 ● 複数の名前のCookieを作成し、それらを全てセット

#[CODE-SAMPLE]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Cookie;
require 'jcode.pl';

#Cookieの値を取り出す。
%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];

#今回セットするCookieを作成
#フォームから入力文字列を得る
$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>Cookieテストプログラム 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]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

Ⅴ.HEADERにCOOKIEをSET

 CGIモジュールを使ってCOOKIEの値をヘッダーにセットにします。次のようにオプションに指定します。 ● print header(-type=>'text/html',-charset=>'UTF-8',-cookie=>$NewCookie);  Cookieが複数の場合は次のとおりです。 ● 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];

#今回セットするCookieを作成
$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>Cookieテストプログラム 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]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$

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

 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]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$