Perl/CGI研究室 'PERL-LABO'

Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

クッキーの基本

研究内容

クッキーの設定と取得の方法を研究します。

詳細

クッキーって?

クッキー。英語では Cookie。お菓子のクッキーです。 なんでクッキーと呼ばれるようになったのかとても不思議なのですが、これ、 ブラウザの機能によって、 ウェブページの訪問者のパソコンの中に保存された、ちょっとしたデータのことです。

えっ、勝手に自分のパソコンになにかデータが保存されちゃうの?っていう感じですが、 実際その通りです。知らないうちに、保存されちゃいます。といっても、 クッキーが保存されるのは決まったフォルダの決まったファイルだけ。 他のファイルを書き換えるとか他のファイルをのぞくとか、そんなことができるわけでは ありません。自分が保存したクッキーだけを読み込めるので、そんなに怖いとかいう ものでもないです。

何に使うの

このページに何回来たとか、前回はいつ来たとか、そういった 軽い情報を訪問者のパソコンに保存しておくことが出来ます。 実用的なものだと、 掲示板などで、名前やメールアドレスなどを最初に入力したら 次から入力しなくてもいい(始めから入力されている)といったこともできます。 登録制(会員制)のページなどで、1回ログインしたら、 次からログインしなくてもいいとか。 多くのサイトで実際に利用されている機能です。

結果

クッキーの保存方法

クッキーの設定には、HTTPヘッダを使用します。 今までにでてきたHTTPヘッダは、Content-type と Location、これで3つ目ですね。 次のようなヘッダです。

Set-Cookie: (保存するデータ)

クッキーの保存に関しては、これだけです。 保存するデータはなんでもOK。保存できるデータの大きさは、ちょっと分からなかったのですが、 できるだけ小さくするのがマナーでしょうか。大きければ通信に時間がかかりますし。

クッキーの取得方法

保存したクッキーを取り出すには、次のようにします。

$ENV{'HTTP_COOKIE'}

HTTP_COOKIE という名前の環境変数の中に、以前保存したクッキーが入っているわけです。 こちらから、以前保存したクッキーをくださいってブラウザにお願いしなくても、 ブラウザ側で、以前保存したクッキーがあればそれを自動的に送ってきてくれるということです。 ですから、大きなデータを保存してしまうと、通信に余計な負荷がかかっちゃいますね。

クッキーは、保存も読み込みも、簡単ですね。

クッキーの有効期限

クッキーには有効期限というものを設定できますが、今回は設定しません。 有効期限を設定しない場合、有効期限はブラウザを閉じるまでとなります。 ブラウザを閉じると、保存されたクッキーは削除されます。

クッキーカウンターを作りましょう

クッキーの保存と読み込みをテストするために、いわゆるクッキーカウンターを作りましょう。 ある訪問者様が、何回CGIプログラムを実行したかっていうことを数えるカウンターです。 クッキーを読み込んで1足して保存する、ということを繰り返します。

作成したCGIプログラム

cookietest.cgi
#!/usr/bin/perl

$now_cookie = $ENV{"HTTP_COOKIE"};
$new_cookie = $now_cookie + 1;

print "Content-type: text/html\n";
print "Set-Cookie: $new_cookie\n";
print "\n";
print "$new_cookie<br>\n";
print "(リロードしてください)";

実行結果

次のリンクをクリックしてみてください。 画面に数字が1つ表示されるはずです。 リロードすると1つずつ増えていきます。 ブラウザを閉じると(このページも閉じてください)、クッキーが削除されて 最初からになります。

クッキーカウンターを開きます。 (別窓で開きます)

考察

動きました。クッキーというものについては昔から知っていましたが、 こんなに簡単だったとは。便利ですね。

研究メモ

  1. Cookieを設定するにはHTTPヘッダで Set-Cookie: (クッキーの内容) とします。
  2. Cookieを取得するには $ENV{"HTTP_COOKIE"} とします。
  3. 有効期限を設定しなかった場合、(全ての?)ブラウザを閉じた時にクッキーは削除されます。
Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

Copyright (c) 'PERL-LABO' All Rights Reserved.  リンクフリーです。