Cookie

ブラウザにクッキーを食わせるには,Set-Cookie:に続けて“パラメタ=;”のリストを送信する.

Content Type: text/html
Set-Cookie: data=str; expires=Fri, 05-Jan-2007 00:00:00 GMT

<html>
...

パラメタには以下のような既定のものがある. 下記のパラメタとその設定値について特別な意味をもっていて,クライアント側で解釈されて何らかの形で利用されるもので, 次回のアクセス時にクライアントからサーバに送信するデータ(HTTPヘッダーのCookie:…の部分)からは除去されている (サーバ側から見ると環境変数HTTP_COOKIEには設定されないという形で観測される). 既定パラメタはいろいろあるけど,実際に設定したくなるのはexpiresくらいなもので,他のものはフ〜ンと思って眺めておくくらいでOKかも.

パラメタ 設定する内容
expires クッキーの有効期限. “Wdy, DD-Mon-YYYY HH:MM:SS GMT”のような形式で指定する…といいつつ間違った形式でかいてても期待どおりに動くみたいな感じだけども.
expiresが指定されていない場合,ブラウザを閉じるとクッキーが破棄される. IEの場合,有効期限が指定されていないクッキーについてはファイルに書き出さないみたいで, 実験やトラブルシュートのときは(必要なくても)expiresに有効期限を指定してクッキーをファイルに書き出させたほうが便利.
path
domain
secure クッキーの安全性が確認できるときに送信することになっているらしいけど,それって具体的にはどういうとき?

localhost/testにあるCGIからクッキーを送信した場合, IE6では(expiresが指定してあって有効期限内であれば) クッキーを保存するディレクトリ(通常C:/Documents and Settings/xxx/Cookies)に xxx@test[1].txtxxxの部分はアカウント名)というファイルが作られて次のような内容が保存される. 送ったクッキーそのままの文字列が保存されているわけではなくて,ブラウザ側で何らかの解釈がされてからファイルに保存されることに注意.

xxx@test[1].txtの内容(例)
data
3
localhost/test/
1024
1901527040
29831260
2746623584
29831096
*

クッキーのやり取りの手順

# クライアント側 サーバ側
(1) リクエストを送信
(2) レスポンスの中に“Set-Cookie:…”を含める
(3) Cookie:…つきでリクエストを送信

この手順のうち(3)でクライアントからサーバに送るCookie:…の文字列は, 手順(2)でサーバが送った文字列と一致しているわけではないことに注意. というか,同じどころかまったく関係ない文字列を送り返してもよいし, 要求もされてないのに脈絡もなくCookie:を送ってもよい. HTTPサーバはクライアントからCookie:が送られてくるとその文字列をHTTP_COOKIEに設定するという動作をやっているだけで, その値をどう利用するかはページ(CGI)を記述するプログラマ次第ということ.

参考


はたいたかし
2006-12-29
Home > Dev > CGI