Back to KT@web
Cookie

1.Cookieってどんなもの?

 Cookieとはクライアントをトラッキングするための手段です。短期Cookieと継続Cookieがありますが、ここでは継続Cookieについて説明します。継続Cookieは、Netscape社がHTTPの拡張として継続Cookieの仕様を最初に考案しました。これは、サーバからクライアントを特定できるような情報をブラウザに保存させ、次にまたそのクライアントからのアクセス時に保存したデータをサーバに送らせる、という機能です。これにより、サーバでは、特定のクライアントを識別することが可能となります。


2.cookieの送信方法

 送信するときの形式は以下の通りです。
Set-Cookie: name(識別名)=value(値); Expires=有効期限; path=指定ドメイン内のパス; domain=ドメイン名; Secure
 これを、Content-typeヘッダの前(後でもよかったかな?)に送信します。

 下の表に各パラメタの説明を示します。

パラメタ 説明
name Cookieを一意に識別するための名前を指定する。必須。
既存のCookieと、同じドメインで同じnameのCookieを送信すると、既存のCookieに上書きすることができる。
value Cookieのデータ本体。
特殊文字等はURLエンコードしなければならない。
expires Cookieの有効期限。以下のフォーマットで指定する。
Wdy, DD-Mon-YY HHW:MM:SS GMT
必ずGMTで指定しなければならない。また期限切れのCookieを送信すると、クライアントに保存されている該当Cookieを削除することができる。期限を指定しない場合、短期Cookieとなり、ブラウザを閉じる(終了する)と共にCookieは消失する。
path Cookieが有効となる(参照可能な)指定ドメイン内の仮想パス。指定パス配下で参照/修正可能となる。
例えば、/指定のCookieがあると、同じドメイン内の/katsu等でも参照/修正が可能となる。
domain Cookieが有効となるドメインの階層を指定する。
あるドメイン名を指定してCookieを送信しても、そのドメインに対応するIPアドレスを指定したURLで接続している場合には、Cookieは受け取れないので注意。
また、自分のいるドメイン以外を指定したCookieは送信出来ない。
secure この属性を指定すると、SSLを使用している場合にのみCookieが有効となる。


3.cookieの参照方法

 参照するときの方法は以下のような処理で行います。
 まず、環境変数のHTTP_COOKIEに全てのCookieが格納されているので、その中から自分が保存したCookieを取り出さねばなりません。HTTP_COOKIEの中には、Cookieが"; "(セミコロン+半角スペース)で区切られて並んでいるので、それをキーにして1つのCookieとして順に取り出していきます。さらに、一つのCookieは、name=valueという形式になっているので、nameが、自分で保存したCookie名と同一のものを検索すれば、該当Cookieを取り出すことができます。

 以下に、Perlスクリプトで、MyCookieという名前で保存したCookieを取り出すときの例を紹介します。

if ($ENV{'HTTP_COOKIE'} ne "") {
  for $yy (split(/; */, $ENV{'HTTP_COOKIE'})) {
    ($name, $value) = split(/=/, $yy);
    if($name eq "MyCookie") {
      $REPEAT = 1;
      $value =~ s/%([0-9A-F][0-9A-F])/pack("C", hex($1))/eg;
      $COOKIE{$name} = $value;
      last;
    }
  }
}


4.ブラウザによる非互換

 というか、Internet Explorerを使用する場合の注意点です。
  • ポート指定は無視される。
  • pathが指定されたCookieが該当pathに対して送信されないことがある。

Copyright (C) katsu. All Rights Reserved.