#! /usr/local/bin/perl
@YOBI = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
@MONTH = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
# Cookieデータ取得
&get_cookie();
$count = $COOKIE{'counter'};
if ($count eq "")
{$count = 0;}
$count++;
# Cookieデータセット/HTML出力
print &set_cookie("counter", $count);
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>Cookie Test</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"000000\">\n";
print "$count 回目の訪問です。ありがとうございます。<BR>\n";
print "</BODY>\n";
print "</HTML>\n";
exit;
#-------------------------------------------------------------
sub get_cookie {
local($str);
local($name);
local($value);
# 環境変数HTTP_COOKIEよりCookieデータを取得
for $str (split(/; */, $ENV{'HTTP_COOKIE'})) {
($name, $value) = split(/=/, $str);
# データのデコード
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
$COOKIE{$name} = $value;
}
}
#-------------------------------------------------------------
sub set_cookie {
local($value);
local($cookie_data);
# データのエンコード
$value = $_[1];
$value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
# cookie有効日付作成(ここでは、30日とします)
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time+30*24*60*60);
# Cookieデータのセット
$cookie_data = sprintf("Set-Cookie: %s=%s; expires=%s, %02d-%s-%d 23:59:59 GMT; \n"
, $_[0], $value, $YOBI[$wday], $mday, $MONTH[$mon], $year+1900);
return ($cookie_data);
}