クッキーはデータをブラウザ側に保存して読み出す機能です。 例えば、掲示板で一度入力したデータを自動的に表示する場合などに使われます。
<クッキーの保存> クッキーはデータ書き込み時に保存します。 クッキーをブラウザ側へ保存するには、下記のSet-Cookieというヘッダー情報を記述します。 この情報はヘッダーの区切りを示す空行の前に出力しなければなりません。 Set-Cookie: name=data; expires=date; name データを区別する為に任意の名前を付けます。 data 保存するデータ date クッキーの有効期限を下記のように記述します。 wday, mday-mon-year hour:min:sec GMT (例) Sun, 02-Apr-2003 12:00:00 GMT wday:曜日 Sun,Mon,Tue,Wed,Thu,Fri,Sat mday:日 01〜31 mon :月 Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec year :西暦年 hour:時 00〜23 min :分 00〜59 sec :秒 00〜59 GMTはグリニッジ標準時間を表します。
<クッキーの読み出し> クッキーは複数のCGIからのデータが環境変数HTTP_COOKIEに自動的にセットされます。 複数のクッキーはHTTP_COOKIEに下記のように「; 」で区切られてセットされます。 name=data; name=data; ・・・ CGIでその環境変数を読み出し、クッキーを保存した時の名前のデータを取り出します。 但し、データ書き込み時はその書き込みデータをクッキーとする必要があります。 これは、環境変数はCGIを実行する前にセットされている為です。 |
■プログラム (sample19.cgi)#!/usr/bin/perl @pair = split(/&/,$ENV{'QUERY_STRING'}); foreach (@pair) { ($n,$val) = split(/=/); $val =~ tr/+/ /; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $in{$n} = $val; } $mode = $in{'mode'}; if ($mode eq 'reg') {&setcook;} print "Content-type: text/html\n\n"; print "<html><body>\n"; &getcook; print "<form action=\"sample19.cgi\">\n"; print "<input type=hidden name=mode value=\"reg\">\n"; print "<input type=text size=30 name=data1 value=\"$data1\"><br>\n"; print "<input type=text size=30 name=data2 value=\"$data2\"><br>\n"; print "<input type=submit value=\"入力\"></form>\n"; print "$data1<br>$data2"; print "</body></html>\n"; exit; ### sub setcook { my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+30*24*60*60); $wday = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$wday]; $mon = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mon]; $expire = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",$wday,$mday,$mon,$year+1900,$hour,$min,$sec); $cook = "$in{'data1'},$in{'data2'}"; print "Set-Cookie: sample=$cook; expires=$expire;\n"; } sub getcook { my($n,$val,@pair); @pair = split(/;\s*/,$ENV{'HTTP_COOKIE'}); foreach (@pair) {($n,$val) = split(/=/); $cook{$n} = $val;} ($data1,$data2) = split(/,/,$cook{'sample'}); if ($mode eq 'reg') {$data1 = $in{'data1'}; $data2 = $in{'data2'};} }
|
|