STEP 9 Cookie のお味見!


Cookie とは?

Cookie はブラウザに値を憶えておいてもらって、サーバーが教えてもらう仕掛けです。
サーバーから CGI によって送られてきた Cookie をブラウザが保存します。
Cookie は、どこのドメインとパスのためなのかが指定されており、 指定されたドメインとパスへアクセスした際に、 サーバー側の環境変数 HTTP_COOKIE へブラウザ側が、Cookie の値を設定します。
はい、ちょっとわかりにくいですね(^^;;;

Cookie のための習作

うごかしてみる

cookie.htm フォームなどの部分(ssi.cgi 経由で呼び出しています) うーむ、ssi.cgi の指定と重なり合って、わかりにくいですねぇ(^^;;;
setcookie.cgi Cookie を設定する CGI
getcookie.cgi Cookie で設定された値をよむ CGI


サーバー側の CGI から、ブラウザに対して Cookie を設定する。

フォームから読み込んだデータを、以下のようにして設定しています。
Set-Cookie:
NickName=gama&gama@mvg.biglobe.ne.jp&http://www2d.biglobe.ne.jp/~gama/;
expires=Thu Aug 10 00:00:00 2000; path=/;

Set-Cookie:
NickName=なまえ&メールアドレス&ホームページのアドレス;
expires=有効期限; path=PATH;
NAME=VALUE
変数名を指定します。
変数名として NickName を設定しています。
VALUEの中のセミコロン(";")、カンマ(",")、半角スペース(" ")は、 %3B, %2C, %20 にそれぞれエンコードして記述する事となっています。 勝手に3つのフィールドをつくってみました。 各フィールドは "&" でくぎっています。 "&" も各フィールド内では %26 でエンコードしておきます。

expires=DATE
有効期限を指定します。
有効期限は、GMT で設定しなくてはならないようです。
形式については、RFC ( RFC 822, RFC 850, RFC 1036, RFC 1123 ) によるようで、ながめたり、いろいろやってみてると perl の gmtime の出力形式を、そのまま設定すればよいようです。 うーん、ほんとかな(^^;;;

domain=DOMAIN_NAME
domain を指定します。
www2d.meshnet.or.jp とか、www2d.biglobe.ne.jp と設定します。 biglobe.ne.jp と meshnet.or.jp のどちらでもアクセスできますので、ここは設定しない事にします。
省略すると、アクセスしているドメイン名が設定されます。
それでも、 www2d.meshnet.or.jp でアクセスしたときに設定された Cookie は、 www2d.biglobe.ne.jp でアクセスすると役に立ちませんね(^^;;;

path=PATH
path を指定します。
/%7Egama/ を設定してしたいところです。 設定された PATH から先のディレクトリで有効になります。
省略すると、アクセスしているパスのディレクトリ部分が設定されます。
どうも、MSIE 3.02 では、チルダを "~" で指定した場合と、 エンコードして %7E と指定した場合とで、どうも動作がおかしいようなので、 とりあえず、"/" だけを指定しておきます。
はい、サーバー上で他の人のディレクトリでも有効になります(^^;;;

Netscape による Cookie の仕様(英語)
とほほさんによる解説

パソコン上での Cookie の保存場所

MSIE では、パソコン上の \WINDOWS\Cookies\ の中に、 テキスト形式で保存されています。 また、.dat 形式でも管理されているようです(MSIE 3.02)

Netspcpe では、\Program Files\Netscape\Navigator\cookies.txt に保存されているようです。 Do not edit! と注意がありましたが、 いらない部分を見当つけて削除してみても、問題はないようでした。 (Netscape 2.02 ja)

ブラウザが設定した Cookie の内容をサーバー側の CGI で読む。

ブラウザは、パソコン側のディスク上に Cookie をしまっておきます。 その該当するドメインをパスを読み込んだときに、 Cookie の内容を環境変数 HTTP_COOKIE に設定します。
サーバー側の CGI は環境変数で Cookie の内容を知る事ができます。


getcookie.cgi の機能
指定するのは、3つのパラメータです。
変数名
変数名を指定します。

フィールドの位置(省略可)
& で区切られたフィールドを、0 から指定します。省略時は 0 です。

既定値(省略可)
指定された変数名、フィールドが設定されていなかった場合に表示する文字列

SSI.CGI での指定例(メールアドレスの取得)
<!--#exec cmd="./getcookie.cgi?NickName 1 foo@m**.biglobe.ne.jp" -->

ニックネームでの歓迎!

ようこそ! ○○さん

と歓迎している CGI です。

nickname.cgi

つぎは、ふたたび掲示板に取り組もうかとおもっています。 Cookie とファイルの共有制御などがつく予定です。
が、予定は、けっこう実現していないですがぁ(^^;;;

戻る |ホームへ |進む