B03:来場者ごとの閲覧回数を数える
普通は訪れた人を区別する事なくページの内容を表示しますが、訪れた人ごとに違う内容を表示したい場合もあると思います。
今回は、来場者ごとの閲覧回数を数えてカウンタとして表示するようなCGIを紹介します。
ページを閲覧した人のパソコンに情報を保存する事ができる、Cookieというものを利用しています。
ファイルを開く
解説
#!/usr/local/bin/perl
プロバイダがPerlを置いている場所を記述します。
ここでは/usr/local/bin/perlにあるとしています。
@weekchar=("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
@monchar=("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
Cookieに保存する時に曜日と月の文字列が必要になるので配列に代入しています。
foreach $data (split(/; */,$ENV{'HTTP_COOKIE'})){
($name,$value)=split(/=/,$data);
$COOKIE{$name}=$value;
}
Cookieの情報を取得して解析しています。
☆今回のポイント☆
Cookieの情報を利用しよう!
$count=$COOKIE{'KMCGIB03'};
if($count eq ""){
$count=0;
}
$count=$count+1;
ここではKMCGIB03という名前でCookieに保存されている情報を取得しています。
取得した情報はカウンタに使用する数字として扱います。
($sec,$min,$hour,$mday,$mon,$year,$week)=gmtime(time()+60*60*24*30);
$year=$year+1900;
$time=sprintf("%s, %d-%s-%d %02d:%02d:%02d GMT",$weekchar[$week],$mday,$monchar[$mon],$year,$hour,$min,$sec);
time()は時刻が秒数で取得できるので、60*60*24*30を加算して一ヵ月後にしています。
gmtimeを使うとGMTによる時刻に変換できます。
CookieはGMTによる時刻で保存期間を指定できるので、その為の文字列を$timeに代入しています。
printf("Content-type:text/html\n");
printf("Set-Cookie:KMCGIB03=$count; expires=$time;\n\n");
printf("<html>\n<head>\n<title>Cookieカウンタ</title>\n</head>\n<body>\n");
printf("<font color=\"red\">$count</font>回目のご来店いらっしゃいませ!\n");
printf("</body>\n</html>\n");
CookieにKMCGIB03という名前で情報を保存するようなHTMLを出力しています。
exit;
プログラムを終了させます。