ブラウザにクッキーを食わせるには,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].txt
(xxx
の部分はアカウント名)というファイルが作られて次のような内容が保存される.
送ったクッキーそのままの文字列が保存されているわけではなくて,ブラウザ側で何らかの解釈がされてからファイルに保存されることに注意.
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)を記述するプログラマ次第ということ.
expires
の書式についてはNetscapeの仕様などの経緯も含めて10.1.2節にかいてある.