18.22.4 DefaultCookiePolicy オブジェクト

クッキーを受けつけ、またそれを返す際の標準的なルールを実装します。

RFC 2965 クッキーと Netscape クッキーの両方に対応しています。 デフォルトでは、RFC 2965 の処理はオフになっています。

自分のポリシーを提供するいちばん簡単な方法は、このクラスを継承して、 自分用の追加チェックの前にオーバーライドした元のメソッドを呼び出すことです:

import cookielib
class MyCookiePolicy(cookielib.DefaultCookiePolicy):
    def set_ok(self, cookie, request):
        if not cookielib.DefaultCookiePolicy.set_ok(self, cookie, request):
            return False
        if i_dont_want_to_store_this_cookie(cookie):
            return False
        return True

CookiePolicy インターフェイスを実装するのに必要な機能に加えて、 このクラスではクッキーを受けとったり設定したりするドメインを 許可したり拒絶したりできるようになっています。ほかにも、 Netscape プロトコルのかなり緩い規則をややきつくするために、いくつかの 厳密性のスイッチがついています (いくつかの良性クッキーをブロックする危険性もありますが)。

ドメインのブラックリスト機能やホワイトリスト機能も提供されています (デフォルトではオフになっています)。 ブラックリストになく、(ホワイトリスト機能を使用している場合は) ホワイトリストにある ドメインのみがクッキーを設定したり返したりすることを許可されます。 コンストラクタの引数 blocked_domains、および blocked_domains()set_blocked_domains() メソッドを 使ってください (allowed_domains に関しても同様の対応する引数とメソッドがあります)。 ホワイトリストを設定した場合は、それを None にすることで ホワイトリスト機能をオフにすることができます。

ブラックリストあるいはホワイトリスト中にあるドメインのうち、 ドット (.) で始まっていないものは、正確にそれと一致する ドメインのクッキーにしか適用されません。たとえば ブラックリスト中のエントリ "example.com" は、 "example.com" にはマッチしますが、"www.example.com" にはマッチしません。 一方ドット (.) で始まっているドメインは、より特化されたドメインともマッチします。 たとえば、".example.com" は、"www.example.com""www.coyote.example.com" の両方にマッチします (が、"example.com" 自身にはマッチしません)。IP アドレスは例外で、 つねに正確に一致する必要があります。たとえば、かりに blocked_domains"192.168.1.2"".168.1.2" を 含んでいたとして、192.168.1.2 はブロックされますが、 193.168.1.2 はブロックされません。

DefaultCookiePolicy は以下のような追加メソッドを実装しています:

blocked_domains( )
ブロックしているドメインのシーケンスを (タプルとして) 返します。

set_blocked_domains( blocked_domains)
ブロックするドメインを設定します。

is_blocked( domain)
domain がクッキーを授受しないブラックリストに載っているかどうかを返します。

allowed_domains( )
None あるいは明示的に許可されているドメインを (タプルとして) 返します。

set_allowed_domains( allowed_domains)
許可するドメイン、あるいは None を設定します。

is_not_allowed( domain)
domain がクッキーを授受するホワイトリストに載っているかどうかを返します。

DefaultCookiePolicy インスタンスは以下の属性をもっています。 これらはすべてコンストラクタから同じ名前の引数をつかって初期化することができ、 代入してもかまいません。

rfc2109_as_netscape
Trueの場合、CookieJar のインスタンスに RFC 2109 クッキー (即ち Set-Cookie:ヘッダのVersion cookie属性の値が1のクッキー)を Netscapeクッキーへ、Cookie インスタンスのversion属性を0に設定する事で ダウングレードするように要求します。デフォルトの値は Noneで あり、この場合 RFC 2109 クッキーは RFC 2965 処理が無効に設定されている 場合に限りダウングレードされます。それ故に RFC 2109 クッキーはデフォルトでは ダウングレードされます。 バージョン 2.5 で 新たに追加 された仕様です。

一般的な厳密性のスイッチ:

strict_domain
サイトに、 国別コードとトップレベルドメインだけからなるドメイン名 (.co.uk, .gov.uk, .co.nz など) を設定させないようにします。 これは完璧からはほど遠い実装であり、いつもうまくいくとは限りません!

RFC 2965 プロトコルの厳密性に関するスイッチ:

strict_rfc2965_unverifiable
検証不可能なトランザクション (通常これはリダイレクトか、 別のサイトがホスティングしているイメージの読み込み要求です) に関する RFC 2965 の規則に従います。この値が偽の場合、検証可能性を基準にして クッキーがブロックされることは決してありません。

Netscape プロトコルの厳密性に関するスイッチ:

strict_ns_unverifiable
検証不可能なトランザクションに関する RFC 2965 の規則を Netscape クッキーに 対しても適用します。
strict_ns_domain
Netscape クッキーに対するドメインマッチングの規則をどの程度厳しくするかを 指示するフラグです。とりうる値については下の説明を見てください。
strict_ns_set_initial_dollar
Set-Cookie: ヘッダで、'$' で始まる名前のクッキーを無視します。
strict_ns_set_path
要求した URI にパスがマッチしないクッキの設定を禁止します。

strict_ns_domain はいくつかのフラグの集合です。 これはいくつかの値を or することで構成します (たとえば DomainStrictNoDots|DomainStrictNonDomain は両方のフラグが 設定されていることになります)。

DomainStrictNoDots
クッキーを設定するさい、ホスト名のプレフィクスにドットが含まれるのを 禁止します (例: www.foo.bar.com.bar.com のクッキーを設定することはできません、 なぜなら www.foo はドットを含んでいるからです)。
DomainStrictNonDomain
domain クッキー属性を明示的に指定していないクッキーは、 そのクッキーを設定したドメインと同一のドメインだけに返されます (例: example.com からのクッキーに domain クッキー属性が ない場合、そのクッキーが spam.example.com に返されることはありません)。
DomainRFC2965Match
クッキーを設定するさい、RFC 2965 の完全ドメインマッチングを要求します。

以下の属性は上記のフラグのうちもっともよく使われる組み合わせで、 便宜をはかるために提供されています。

DomainLiberal
0 と同じです (つまり、上述の Netscape のドメイン厳密性フラグが すべてオフにされます)。
DomainStrict
DomainStrictNoDots|DomainStrictNonDomain と同じです。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。