Study of CGI

Cookie

Cookie とは、ブラウザ側に個人情報などクライアント固有の情報を保存するものです。

これにより、同じサイトに訪れたとき、クライアントごとにカスタマイズされた画面を表示させたり、フォームなどに自動的に値を挿入したりできます。

Cookieはクライアント側にファイルを書き込むという性質上、クライアント側に受け入れの設定が去れtりる必要があります。


Cookieのセット

Cookie をセットする場合は、Set-Cookie:ヘッダを以下のように出力します。

   Set-Cookie: DATA=maker; expires=Mon, 30 Dec 2010 24:00:00 GMT;

ここでは、DATA=makerというCookieデータをセットしています。

最後に; を付けることで、項目の終わりを表します。

次のexpiresは、セットするCookieデータの有効期限を表します。

このCookieは世界標準時 (GMT)で「2010年12月30日 (月) 24:00:00」が期限になります。

次回アクセス時、ブラウザはこのCookieが期限切れかどうかを判断し以下のような動作をします。

  • 期限内ならCookieデータをサーバに提出
  • 期限切れならCookieデータを破棄 (提出しない)

セットされるCookieの基本的な文法では以下のとおりです。(一行です)

   Set-Cookie: クッキー名=クッキー値; expires=有効期限;
               domain=ドメイン名(サーバ名); path=パス; secure

セットされるCookieの値の意味は以下のとおりです。

クッキー名=クッキー値 ブラウザーに保存したい変数名とその値。
スペース、カンマ、セミコロンは含まれてはいけません。URLエンコードをする必要があります。必須です。
expires クッキーの有効期限。
有効期限はGMT(グリニッジ標準時)で指定します。
フォーマットは以下のとおりです。
Wdy, DD-Mon-YYYY HH:MM:SS GMT
有効期限が省略されると、テンポラリークッキーとして扱われます。(ブラウザーを閉じた時点で無効となります)
domain セットしたクッキーが送信されるドメイン。
サーバ名で指定すれば、指定サーバへのアクセスの時だけセットしたクッキーを送信します。
ドメインが省略されると、そのときアクセスしたサーバ名がセットされます。
path セットしたクッキーが送信されるパス。
パスが省略されると、アクセスしたリソース(HTML、CGI)のパスがセットされます。
secure この項目が指定されていると、アクセス先がSSL などのような安全なサイトの場合のみにクッキーを送信するようになります。ドメイン、パスが一致したとしても、アクセス先が安全とみなされないと、クッキーを送信しません。

Cookieの取得

クライアントに保存されたCookieは、有効期限内ならサーバーに送られます。

そして、サーバーは受け取ったCookie名と値を環境変数:$ENV{HTTP_Cookie}に保存します。

Cookieの値を所得するには、まず環境変数:$ENV{HTTP_Cookie}を読み出し、個々の「名前=値」のセットに分割し、さらに、名前と値に分割し、値をデコードします。

多くは、以下のように連想配列に名前=$key、値=$valueとして保存されます。

if ( $ENV{HTTP_Cookie} ne '' ){
   foreach ( split(/\s*;\s*/,$ENV{HTTP_Cookie}) ){
      foreach ( split(/\,/,$_) ){
         my ($key,$value) = split(/=/,$_);
         $value =~ tr/+/ /;
         $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
         $Cookie{$key} = $value;
      }
   }
}

ポイント

  1. Cookieを利用する際には、クライアントの受け入れが必要。
  2. サーバーに送られたCookieは、環境変数:$ENV{HTTP_Cookie}に保存される。
Mail HomePage SSI

□新着

  • 2016/04/14
    ページ復旧
  • 2007/10/06
    Story Maker始動
  • 2007/06/13
    久々の更新
  • 2007/01/06
    logちょっとバージョンアップ
  • 2006/07/27
    ホームページのPerl 終了

□Topics

  • 2016/04/14
    サイト復旧
  • 2007/10/06
    StoryMaker始動
  • 2007/06/13
    今後にぜひご期待を!
  • 2006/06/26
    今後について
  • 2006/06/15
    環境の変化