Cookie---状態管理とトラッキング(2)

来源:互联网 发布:手机网络管理 编辑:程序博客网 时间:2024/06/10 16:50

サンプルsimple: Cookieの基本確認

 今回,筆者は四つのサンプル・プログラムを作りました。CookieをクライアントにセットしてCookieの動作を試す「simple」,Cookieを自由に読み書きできる「ReadWrite」,ユーザーのアクセスを追跡する「Tracker」,ログイン状態を管理できる掲示板の「board」です。すべてPerlで書かれたCGIのWebアプリケーションです。

動作は,以下の環境で確認しました。

  • サーバー側
    • Windows XP
    • Apache 2.0.55*2
    • ActivePerl 5.8.8*3
  • クライアント側
    • Windows XP(サーバーと同じマシン)
    • Internet Explorer 6.0

 最初は,単純にCookieをクライアントにセットするプログラムから見てみましょう。Webブラウザの設定を,Cookieを受け取ったときにダイアログを表示する設定にして実験することで,ブラウザがいつCookieを受け取るかを体感しやすくなります。

Cookieを受け取るときにダイアログを表示

 Webアプリケーションから送られてくるCookieの内容や,そのタイミングを見る目的で,Webブラウザの設定を変更します。ここではInternet Explorerの例を示します。Internet Explorerのメニューで,[ツール]-[インターネットオプション]を選び,表示されたダイアログの「プライバシー」タブで[詳細設定]ボタンを押します。

 図3のような画面が出ますので,「ファーストパーティのCookie」と「サードパーティのCookie」の両方とも「ダイアログを表示する」に設定します。このようにすると,Cookieを受け取ったときにダイアログを表示するようになります。

図3●Cookieを受け取ったときにダイアログを表示するように設定する図3●Cookieを受け取ったときにダイアログを表示するように設定する

Cookieを見る

 では,この設定を施した状態で,Cookieの基本を確認してみましょう。まず,リスト1に示すsimple.cgiをCGIとして設置します。

#!C:\Perl\bin\perluse strict;use warnings;print <<"EOD";Set-Cookie: key1=value1; path=/<html>  <head>    <title>simple.cgi</title>  </head>  <body>    <h1>simple.cgi</h1>  </body></html>EOD
リスト1●Cookieの基本を確認するCGI

 「Set-Cookie:」で始まる行が,Webブラウザに送るSet-Cookieを示します。そのあとの「<html>」以降は,Webブラウザで表示される内容です。WebブラウザでこのCGIにアクセスすると,WebブラウザがCookieを受け取り,図4のようなダイアログを表示します。

図4●ブラウザがCookieを受け取ったときに表示される「プライバシー警告」ダイアログ図4●ブラウザがCookieを受け取ったときに表示される「プライバシー警告」ダイアログ

 さらに[詳細情報]ボタンを押すと,図5のように表示されます。

図5●「プライバシーの警告」ダイアログを詳細表示する図5●「プライバシーの警告」ダイアログを詳細表示する  ここに書かれているのがsimple.cgiから送られてきたCookieの情報です。リスト1と見比べてみると,図5の「名前」と「データ」と「パス」の部分が,リスト1の
Set-Cookie: key1=value1; path=/
に書かれている内容に対応していることがわかるでしょう。

 このSet-Cookieにはexpiresがありませんから,「有効期限」は「セッションの終わり」になっています。またsecureフラグがついていないので「セキュリティ保護」は「いいえ」になっています。

 [Cookieを許可]のボタンを押すと,Webブラウザは図6のような画面になります。この画面を見ただけではCookieの有無や内容は全くわかりません。

図6●simple.cgiの表示図6●simple.cgiの表示

 ぜひ,Cookieを受け取ったらダイアログを表示する設定のまま,あちこちのWebサイトにアクセスしてみてください。驚くほどに頻繁にダイアログが表示されることがわかるはずです。つまり,Cookieはそれほど一般的に多用されている技術なのです。