end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

今更、cookieへ入門してみます

きっかけとなったのは、itproに記載されていた結城 浩さんの記事です。

「簡単実装で学ぶWeb技術」
http://itpro.nikkeibp.co.jp/article/COLUMN/20080331/297574/

これまで cookie は利用してきたものの、その中身を殆ど理解していなかったので、この記事に沿ってcookie を理解したいと思います。

Set-Cookie の書式

itproの記事にもあるとおり、serverがclientにCookieを送信する際のSet-Cookieの形式は次のようになります。

Set-Cookie: Cookie名=値; domain=ドメイン名;path=パス名; expires=有効期限; secure


domainやpathは、itproの記事で次のように解説されています。
(rfcを見るなら http://ftp.ics.uci.edu/pub/ietf/http/rfc2109.txt )

Cookie名=値
Cookie名と値は必須です
domain, path
Cookieの有効範囲。例えば「domain=hoge.co.jp; path=/nsw/」の場合, hoge.co.jpの/nsw/にhttp requestを送る場合にCookieを付加します。domainやpathがない場合,Cookieを得たときのhttp responseにあるdomainとpathを利用して,得たCookieをserverに送るかどうかをブラウザが判断します。
expire
clientがserverにCookieを送る限界の日時。expireがない場合,ブラウザの終了までが,Cookieの有効期限になります。
secure
secureがあると,ブラウザはSSLなどのセキュアな経路を利用している場合に限ってCookieを送信します。

簡単なSet-Cookieのテスト

まず、はじめに次のtest scriptでset-cookieの基本動作を確認してみます。

#!perl

use strict;
use warnings;

print <<"EOD";
Set-Cookie: key1=value1; path=/

test Set-Cookie
EOD

このscript (cgi)にfirefox + firebug + firecookie で確認すると、次のように表示され、ブラウザ側でcookieを受信できたことが分かります。


cookieを使用したログイン管理

itproの記事や日経ソフトウェアのサンプルプログラムにあるとおりでしたので、今回はここまでにしておきます。

http://itpro.nikkeibp.co.jp/article/COLUMN/20080331/297574/
http://itpro.nikkeibp.co.jp/article/MAG/20061212/256629/web0702.zip

サンプルプログラムでは、Digest::MD5を使用してuniqueなidを作成していましたが、念のため、書き留めておきます。

use Digest::MD5 qw(md5_hex);

sub create_unique_id($) {
    my $trial = shift;
    return md5_hex($secret_key . localtime() . $$ . rand() . $trial);
}