クッキー(Cookie)

 CGIやJavaScriptなどを用いると、「クッキーファイル」と呼ばれるものをクライアント側に保存する事が出来ます。クッキーは、非常に制限された形でしかWebブラウザ側に情報を保存出来ませんが、セキュリティやプライバシーの観点から言えば最適なのです。最もよく使われている例としては、クッキー機能を使った買い物カゴCGIなどが有名です。ごく普通の掲示板スクリプトでも、訪問者が書き込み欄に一旦入力した情報をある一定期間保存していたりするのは、このクッキー機能を使ったものです。

クッキーの制限

 クッキーは、セキュリティやプライバシーの観点から、その保存方法が非常に制限されています。その制限事項は、以下のようなものです。

(1)保存先が限定されている。
(2)一定の書式でしか書き込みが出来ない。
(3)保存形式はテキストのみである
(4)ユーザーに関しての情報は送信されない。
(5)自分で送り込んだクッキーからしかデータを取り出せない。

 クッキーの保存場所については、皆さん既にご存知かと思いますが、Windows 98系とNT系とでは異なっていますので、ご注意下さい。IE4IE5の場合は以下の通りです。

Windows 98系・・・C:\WINDOWS\Cookies\

Windows NT系・・・C:\WINNT\Profiles\<ユーザー名>\Cookies\

Windows 2000・・・C:\Documents and Settings\<ユーザー名>\Cookies\

クッキーの使用方法

 クッキーを使ったCGIスクリプトを作成する時は、以下の2つの処理を実装しなくてはいけません。

(1)Webブラウザから受け取ったクッキー情報を読み取る

 クッキーは、Webブラウザから環境変数HTTP_COOKIEに格納されて送られて来ます。ですから、この環境変数から情報を取り出すようにします。実際には、以下のように適当な変数を作り、情報を変数に取り込みます。

$cookie = $ENV{'HTTP_COOKIE'};

 又、環境変数HTTP_COOKIEに格納されている情報の書式は、以下のようになっています。

name=値;name=値;name=値.....

このようにクッキー名と値が「=」で結ばれた形になっている為、実際にこれらの値を使う時にはPerlのsplit関数を使って分離してやらねばなりません。具体的には、また別のコーナーで_(._.)_

(2)Webブラウザにクッキーを送り込む

 WebサーバーからWebブラウザに対してクッキーを送るには、HTTPヘッダーを使います。このHTTPヘッダーと言うのは、Webブラウザに対して送られるHTMLの前に送られる部分の事です。

Content-type:text/html HTTPヘッダー
Set-cookie:name=***;email=***.....
  ←必ず空行が必要
<HTML>  
<TITLE>*****</TITLE>  
<BODY> 本文
...............  
</BODY></HTML>  

 クッキーを設定する時は、このHTTPヘッダーに「Set-cookie」を使います。このSet-cookieの書式は以下の通りです。

Set-cookie: name=値; expires=有効期限(GMT); path=URLパス; domain=サイトドメイン; secure

この中で「name=値」は必ず指定しなくてはいけません。他の項目は、省略してもWebブラウザが適切に設定してくれます。ただし、expiresを設定しないと、Webブラウザを閉じる度にクッキーがリセットされる事になります。各項目の属性の意味は以下の通りです。

名前

意味

name=値 クッキーファイルに保存されるデータの変数名と、その中に保存される値。これは省略する事が出来ない。
expires=有効期限 クッキーの有効期限の日時を指定するるこの日時以降はクッキーは保持されず、サーバーにも送信されない。この日時の指定は、グリニッジ標準時でのみ保存される。書式は、Wdy,DD-Mon-YY HH:MM:SS GMTとなる。
pat=URLパス 有効なクッキーURLのうち、パスの部分を指定する。指定がなければ、パスはクッキーを設定したドキュメントと同じになる。
domain=サイトドメイン 有効なクッキーURLのうち、ドメインの部分を指定する。指定がなければ、ドメインはクッキーを設定したサイトドメインと同じになる。
secure この属性を記述すると、クッキーを安全な接続だけを用いて送信するようになる。

クッキーの削除方法

 クッキーは有効期限を過ぎるまでどんどん溜まって行きます。もし、途中でクッキーを削除したくなった時はどうすればいいでしょう。

 クッキーの削除には、有効期限の設定、つまりexpiresの設定を使います。つまり、現在の日付よりも昔の日付を設定する事で、クッキーを削除する事が出来ます。具体的には以下のように、time関数で得た値から「1」を引く事により、現在よりも前の時間を作り出します。

($sec, $min, $hour, $day, $mon, $year, $wdy, $ydy, $isdst) = localtime(time-1);

実際の使用例としては、買い物カゴCGIで注文を送信後、溜まったクッキーを一括消去する時などに使います。

環境変数 前へ

HOME

次へ Perlの基本