[トップページ]
Cookie について
Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させるしくみです。1つのCookieには4096バイトのデータを記録でき、最大で300のCookieを保存できます。

1台のサーバが同じコンピュータに対して発行できるCookieの数は20個に制限されています。Cookieにはそれぞれ有効期限を設定することができ、有効期限を過ぎたCookieは消滅します。
Cookieの訪問者に対する考慮
使い方によっては、非常に便利な Cookie ですが、この機能自体「嫌」という方もいます。それは、サーバー側から クライアントに「知らないうち」に情報ファイルを作成してしまうからです。ブラウザには、「Cookieを有効にする」チェックがあり、 チェックされていない場合、当然 Cookie は使用できません。

Cookieを使用するページを作成するのであれば、ホームページ内に「Cookieを使用しています」表示をつける、 「Cookieを使用する」チェックボックスを作成するなど、訪問者への配慮を考えなければならないと思います。
Cookieの呼び出し
Cookieの呼び出し方法は、JavaScriptとPerlで多少違いがあります。
■ JavaScriptからCookieデータを取得する
JavaScriptでのCookieデータの取得は、document.cookie を変数に代入する等で利用できます。
// document.cookieを変数に代入
var cookie_data = document.cookie;
■ JavaScriptからCookieデータをセットする
document.cookie に決められたフォーマットで値をセットします。
// フォーマットに従い、データを変数にセット
var cookie_data = "count=150; expires=Wed, 31-Dec-2003 23:59:59;";
document.cookie = cookie_data;
■ PerlからCookieデータを取得する
Perlでは環境変数 HTTP_COOKIEよりデータを取得します。下記の例では、;(セミコロン)で区切られているcookieデータを分解し、さらにデコードを行ってから連想配列にセットしています。
for $buf (split(/; */, $ENV{'HTTP_COOKIE'})) {
	($name, $value) = split(/=/, $buf);
	$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
	$COOKIE{$name} = $value;
}
■ PerlからCookieデータをセットする
cookieのデータセットは出力の際、Content-typeの直前にSet-Cookie:〜を記述します。データはエンコードしておきます。
$val = "こんにちは";
$val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
$set_cookie = "Set-Cookie: ";
$set_cookie .= "msg=$val; ";
$set_cookie .= "expires=Fri, 31-Dec-1999 00:00:00;\n";
print $set_cookie;
print "Content-type: text/html\n\n";
・・・
エンコードとデコード
Cookieで情報を記録するとき、日本語などはそのまま書きこむことができません。このような情報を記録するための変換を、エンコードといいます。また、エンコードした情報を読み出して、もとの形式にするための変換をデコードといいます。

エンコード、デコードの方法は、JavaScriptとPerlスクリプトで異なります。

■ JavaScriptでのエンコード
JavaScriptでは escape 関数でエンコードを行います。
var cookie_str = "key=" + escape("こんにちは") + "; ";

■ JavaScriptでのデコード
JavaScriptでは unescape 関数でデコードを行います。
var cookie_str = unescape(cookie_data.substring(0, 20));

■ Perlスクリプトでのエンコード
Perlでは置換演算子を使用して、英数字以外すべてを unpack 関数でエンコードします。
$str =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
(\W) は英数字以外の一つの要素
%%%02X は%% と %02Xに分かれ、%XXに書式化

■ Perlスクリプトでのデコード
同じく、デコードは pack 関数を使用します。
$str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
[0-9A-Fa-f] は英数字

Cookieのデータフォーマット

NAME=VALUE Cookieの名前。名前のあとに、実際のデータを付加します
省略不可
expires=DATE 有効期限。形式は [Fri, 31-Dec-1999 00:00:00] という型です
省略可
domain=DOMAIN_NAME Cookie発行元のドメイン名(たとえば、www1.freeweb.ne.jpなど)
省略可
path=PATH ここで指定したパスに対して、cookieが送信されます
省略可
secure データを暗号化します
省略可

上記のデータを ;(セミコロン)で組み合わせて作成することになります。

	var cookie_data;
	cookie_data = "count=150; expires=Wed, 31-Dec-2003 23:59:59;
				domain=www1.freeweb.ne.jp; path=/; secure";
	document.cookie = cookie_data;

[トップページ]
Copyright (C) 2000 Me All rights reserved
Mail To webmaster