HTTP::Cookies

Hippo2000 (2000/7/28)

HTTP::Cookiesモジュールなのです。

作者はGisle Aasさんです。メールで許可をいただきました。


目次


名前

HTTP::Cookies - クッキー(Cookie)の格納と管理


概要

 use HTTP::Cookies;
 $cookie_jar = HTTP::Cookies->;new;
 $cookie_jar->add_cookie_header($request);
 $cookie_jar->extract_cookies($response);

説明

クッキー(Cookie)は、サーバー側の接続が接続のクライアント側に情報を格納し、取り出すという両方が出来る一般的な機能です。クッキーについてのさらなる情報は<URL:http://www.netscape.com/newsref/std/cookie_spec.html>と<URL:http://www.cookiecentral.com/>をご覧下さい。このモジュールはdraft-ietf-http-state-man-mec-08.txt.で記述されている新しい形式のクッキーも実装します。クッキーの2つの変数は幸せに共存できるものと想定されます。

HTTP::Cookies クラスのインスタンスはSet-Cookie2:とSet-Cookie:ヘッダーの集まりを格納することができ、この情報を HTTP::Request オブジェクトのCookieヘッダを初期化するために使うことが出来ます。 HTTP::Cookiesオブジェクトの状態はファイルに格納でき、ファイルから取得することができます。


メソッド

以下のメソッドが提供されます:

$cookie_jar = HTTP::Cookies->new;
コンストラクタはハッシュ形式のパラメータを取ります。以下のパラメータが理解されます:
  file:            クッキーが取り出され、保存されるファイルの名前
  autosave:        破壊の間に保存される(bool)
  ignore_discard:  捨てるように要求されてもクッキーを保存する(bool)

将来以下のパラメータが入ります(まだ実装されていません):

  max_cookies               300
  max_cookies_per_domain    20
  max_cookie_size           4096
  no_cookies   クッキーを返さないドメイン名のリスト
$cookie_jar->add_cookie_header($request);
add_cookie_header()メソッドは適切なCookie:-header を引数として与えられたHTTP::Request オブジェクトに設定します。このメソッドが呼ばれる前に、$requestは適切なurl属性を持たなければなりません。
$cookie_jar->extract_cookies($response);
extract_cookies()メソッドは Set-Cookie:とSet-Cookie2: を引数として渡されたHTTP::Response から探します。見つかったこれらのヘッダはすべて、$cookie_jarの状態を更新するために使われます。
$cookie_jar->set_cookie($version, $key, $val, $path, $domain, $port, $path_spec, $secure, $maxage, $discard, \%rest)
set_cookie()メソッドは$cookie_jarの状態を更新します。$key、$val、$domain、$portそして$path引数は文字列です。$path_spec、$secure、$discard引数はブール値です。$maxageはこのクッキーが生きている秒数を示します。値が<=0はこのクッキーを削除します。%restは"Comment"や"CommentURL"のような他の様々な属性を定義します。
$cookie_jar->save( [$file] );
このメソッドは$cookie_jarの状態をファイルに保存します。この状態はload()メソッドを使って取り出すことが出来ます。もしファイル名が指定されなければ、コンストラクトの時に指定された名前を使用します。属性ignore_discaredが設定されれば、廃棄するようにしるしのついたクッキーですら保存します。
 
デフォルトは"Set-Cookie3"の行の並びを保存します。"Set-Cookie3"はLWP専用のフォーマットです、他のブラウザとの互換性は分かりません。 HTTP::Cookies::Netscape サブクラスはNetscapeと互換性のあるフォーマットで保存するために使われます。
$cookie_jar->load( [$file] );
このメソッドはファイルからクッキーを読みこみ、$cookie_jarに追加します。ファイルはsave()メソッドにより書かれたフォーマットでなければなりません。
$cookie_jar->revert;
このメソッドは$cookie_jarを空とし、最後に保存したファイルから$cookie_jarをリロードします。
$cookie_jar->clear( [$domain, [$path, [$key] ] ]);
引数無しでこのメソッドを呼び出すと$cookie_jar全体を空にします。もし1つの引数だけが与えられれば、そのドメインに所属するクッキーだけが削除されます。引数が2つ与えられると、指定されたドメインにあるそのパスに所属するクッキーだけが削除されます。3つの引数が与えられると指定されたキー、パスそしてドメインをもつクッキーが削除されます。
$cookie_jar->scan( \&callback );
引数はクッキーが$cookie_jarに格納されるたびに呼び出されるサブルーチンです。サブルーチンは以下の引数で呼び出されます:
  0  バージョン(version)
  1  キー(key)
  2  値(val)
  3  パス(path)
  4  ドメイン(domain)
  5  ポート(port)
  6  パス指定(path_spec)
  7  セキュリティ(secure)
  8  終了(expires)
  9  廃棄(discard)
 10  ハッシュ(hash)
$cookie_jar->as_string( [$skip_discard] );
as_string()メソッドは"\n"で区切られた"Set-Cookie3"ヘッダ行の並びで表された$cookie_jarの状態を返します。$skip_discardがTRUEであれば、Discard属性を持ったクッキーのための行は返しません。

サブクラス

われわれはNetscapeと互換性のあるクッキーファイルをロードし保存するHTTP::Cookies::Netscapeというサブクラスも提供します。以下のように$cookie_jarを組み立てると、LWPをNetscapeのクッキーを共有させることが出来ます:

 $cookie_jar = HTTP::Cookies::Netscape->;new(
                   File     => "$ENV{HOME}/.netscape/cookies",
                   AutoSave => 1,
               );

Netscapeクッキーファイル・フォーマットはSet-Cookie2ヘッダで利用できるすべての情報を保存できないということにどうかご注意下さい。そのためこのフォーマットで保存すると、おそらく幾つかの情報を失うでしょう。


著作権(COPYRIGHT)

Copyright 1997-1999 Gisle Aas

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


ホーム Perlの小技 HTTP

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。