006. Perl CGI Programming[COOKIE] Tips CODE
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]$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$#$