Perl/CGI研究室 'PERL-LABO'

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

クッキーの書き込み場所と受け取り場所の関係の研究

研究内容

クッキーを書き込むCGIプログラムとクッキーを読み込むCGIプログラムが異なる場合は どうなるのか研究しましょう。 クッキーは誰のもの?という研究です。

詳細

クッキーは誰が読み込めるのか?

クッキーというのは、書き込んだ人しか読めないようなものでなければいけません。 自分が書き込んだクッキーを他の人に読まれてしまったら嫌ですよね? それでは、クッキーというのは誰が読み込めるのでしょうか。 書き込んだCGIプログラムだけが読み込めるのでしょうか、 それとも同じサイトに置かれた他のCGIプログラムでも読み込めるのでしょうか。 その辺を実際に試してみます。

結果

作成したテスト用のCGIプログラムの内容

この研究のために必要なのは、クッキーを書き込むCGIプログラムと クッキー読み込むCGIプログラムです。 まず、クッキーを書き込むCGIプログラムで、クッキーを書き込みます。 次に、クッキーを読み込むCGIプログラムで、読み込めるかどうかを確認します。 クッキーを読み込むCGIプログラムは、このサイト内で場所を変えて置いてみて、 サイト内の場所によって読めたり読めなかったりするのか確認してみましょう。

作成するCGIプログラムは、単に「これはクッキーです」という文字列を クッキーとして書き込むものと、クッキーの内容をそのまま画面に表示するものです。

作成したCGIプログラム

クッキー書き込みCGIプログラム writecookie.cgi
#!/usr/bin/perl

print "Content-type: text/html\n";
print "Set-Cookie: これはクッキーです\n";
print "\n";
print "「これはクッキーです」というクッキーを書き込みました。";
クッキー読み込みCGIプログラム readcookie.cgi
#!/usr/bin/perl

print "Content-type: text/html\n";
print "\n";
print "クッキーの内容=$ENV{'HTTP_COOKIE'}";

実行結果

下のリンクをクリックしてみてください。まずはクッキーを書き込みます。 有効期限は設定していませんので、有効期限はブラウザを閉じるまでになります。

クッキーを書き込みます。

続いて、下のリンクでクッキーの読み込みをテストします。 クッキー読み込みCGIプログラムは、書き込みCGIプログラムと同じディレクトリ、 同じ階層の別のディレクトリ、 上のディレクトリ、下のディレクトリの4箇所に置きました。

クッキーの内容を表示します。 (書き込みCGIプログラムと同じディレクトリ)
クッキーの内容を表示します。 (書き込みCGIプログラムの上のディレクトリ)
クッキーの内容を表示します。 (書き込みCGIプログラムと同じ階層の別のディレクトリ)
クッキーの内容を表示します。 (書き込みCGIプログラムの下のディレクトリ)

考察

面白い結果が出ました

結果は次のようなものでした。

読み込むCGIプログラムの位置クッキー読み込み
書き込んだCGIプログラムの上のディレクトリ不可
書き込んだCGIプログラムと同じ階層の別のディレクトリ不可
書き込んだCGIプログラムと同じディレクトリ
書き込んだCGIプログラムの下のディレクトリ

なるほど〜。書き込んだクッキーを読み込めるのは、 書き込んだCGIプログラムと同じディレクトリか、そのディレクトリより下のディレクトリに置かれた CGIプログラムだけということですね。これなら、 自分が書き込んだクッキーを他のサイトのCGIプログラムに読み込まれてしまったりすることはありません。 同じドメインを複数のユーザーで使っているような場合(~ユーザー名というやつで) でも大丈夫ですね。 これなら安心です! なお、ここでは1階層下のディレクトリしかテストしませんでしたが、 もっと下の階層のディレクトリでも読み込めるようです。

これで疑問が解決しました。スッキリ!

読み込めるCGIプログラムを指定する方法もあるようです

注意しないといけないのは、自分が書き込んだクッキーであっても、 書き込んだCGIプログラムが置かれたディレクトリ以下に置かれたCGIプログラムじゃないと読み込むことが できないという点ですね。

でも、それじゃ困るっていう場合もあるかもしれません。 そんな時のために、クッキーを書き込むときに、そのクッキーを読み込めるCGIプログラムを 指定する機能というのもあるんだそうです。今回研究したのは、 書き込んだクッキーを読み込めるCGIプログラムを指定しなかった場合ということになりますね。

この機能についてはまたいずれ研究することにしましょう。

分かったこと

  1. 書き込まれたクッキーは、書き込んだCGIプログラムが置かれたディレクトリか、
    そのディレクトリよりも下のディレクトリにあるCGIプログラムで読み込むことができます。
  2. クッキーを書き込むときに、読み込めるCGIプログラムの位置を指定する方法もあるようです。
Perl/CGI研究室 'PERL-LABO' TOPへ
戻る(History.Back)

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