第五章:クッキーのおいしい焼き方
この章では、接続をまたいでも情報が保存されている継続クッキーの発行方法を説明します。...と言っても、発行方法自体は大して難しくはありません。クッキーのフォーマットは下記のように決められています。
Set-Cookie: *1=*2; Expires=*3; path=*4; Domain=*5
*1には、クッキーの名前を指定します。他の名前と重ならないような、独自の名前を指定してください。なるべく他人が想像できないようなもので、その名前から何のクッキーか想像できるものが良いと思います。
*2には、実際に利用するクッキーの中身を指定します。
*3には、「Fri, 29-Sep-1999 00:00:00 GMT」のような形式で、クッキーの有効期限を指定します。ただし、曜日と日付が一致していなかったりすると正しく発行できないので注意してください。
*4にはクッキーを発行するパスを指定します。ただし、仮想パスを利用している一部のサーバーでは利用できないことがあるので'/'のみを指定しておいた方が無難でしょう。
*5には、クッキーを発行するサーバー名を「www.abc.com」と言うように指定します。
また、このヘッダはMIMEヘッダよりも前で出力してください。MIMEヘッダの後だと、この文字自体が出力されるだけです。以下がクッキー発行の例です。
puts("Set-Cookie: abc=123; Expires=Fri, 29-Sep-1999 00:00:00 GMT;"
" path=/; Domain=www.abc.com\n\n");
puts("Content-type: text/html\n\n");
このように簡単に発行できるのですが、一つ問題があります。同名のクッキーは一つしか発行出来ないという制限があるのです。何度もSet-Cookie:を発行しても良いのですが、一つのサーバーに発行できるクッキーの数に制限がある上に、もしブラウザでクッキーの発行を確認するダイアログを出すように設定されていたらその度にダイアログが出てきてしまい大変です。では、複数のクッキーを発行するためにはどのようにしたらいいのでしょうか?それは、*2に指定される値の中に、独自のフォーマットを用いて複数の値を含めてしまえば良いのです。
airboard=handle*Myu^email*mew@post.co.jp^passwd*abc;
例えば、このようにします。この場合、*2に格納される値は、
handle*Myu^email*mew@post.co.jp^passwd*abc
となります。取得するときは、*1で該当するクッキーかどうかの判別をして、*2の値をフォームデータの時と同じ方法で分割していけば、簡単に複数のクッキーを利用することが出来ます。デリミタ(区切り文字)に用いている'*'と、'^'は別に他の文字でも構いませんがなるべく使われない値にしておいた方が無難です。デリミタに使用されている文字が、実際の値として保存されてしまうと分割するときに値がおかしくなってしまいます。
□次の章へ