cookie
クッキーでは、ブラウザに情報を送ってユーザーを判別することができます。
そのためには、HTTPヘッダを利用します。
基本的には、クッキーを送るにはこのように書けばOKです。
print "Content-Type: text/html\n" print "Set-cookie: キー名=値; expires=有効期限(GMT)\n\n;"
さて、早速一つずつ見てきましょう。
まず、Set-cookieで、クッキーを送ります。
Set-cookie: キー名=値
キー名というのは、クッキーに保存されているデータの変数名、
値はその中に保持される値です。
このキー名=値で、サーバーは読み取りするかどうか判別します。
expires = 有効期限(GMT)\n\n;"
有効期限は省略可能ではありますが、設定しないとwebブラウザが
終了させるたびにクッキーはリセットされてしまいます。
expiresを指定するための、有効期限の作成は以下を使用します。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 有効期限) @day = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); @month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug", "Sep","Oct","Nov","Dec"); $expireDate = sprintf("%s\, %02d\-%s\-%04d%02d:%02d:%02d GMT", $day[$wday],$mday,$month[$mon],$year+1900,$hour,$min,$sec);
この「有効期限」という部分には、日数を入れます。
たとえば30日だったら、60*60*24*30となります。
それでは、個人別訪問カウンターを作ってみます。
my $cookie = $ENV{'HTTP_COOKIE'};#クッキーを受け取る my @array = split(/; /,$cookie); #複数のクッキーがある場合は取得して分離 foreach $tmp (@array) { my($key, $value) = split(/=/, $tmp); if($key eq 'count'){ $count = $value; } } if($count == ''){ $count = 0; } $count++; #クッキーの有効期限(30日間) ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 60*60*24*30); @day = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); @month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep", "Oct","Nov","Dec"); #有効期限 $expireDate = sprintf("%s\, %02d\-%s\-%04d%02d:%02d:%02d GMT", $day[$wday], $mday, $month[$mon], $year+1900, $hour, $min, $sec );
これがクッキーのための大まかな流れです。
表示部分は、
print "Content-type: text/html\n"; print "Set-cookie: count = $count; expires = $expireDate\n\n"; my $body = << "END_OF_HTML";counter 個人別カウンター あなたは$count回目のご訪問です。 END_OF_HTML print $body;
こんな感じです。
これで、訪問者別にカウンターが回るようになりました。