4.7.1 クラス

クラス Cookie( name, value[, attributes])

このクラスはname という名前を持ち、value を値に持つ 単一のクッキーを生成するために使います。加えて、Netscape の仕様と RFC2109 で定義されている属性もキーワード引数で渡せます。

オブジェクトの属性はクッキーの属性を表しており、その文字列表記は クッキーの文字列表記の一部になります。 Cookie クラスは属性名を有効なものだけに制限していて、実際には name, value, version, path, domain, secure, comment, expires, max_age, commentURL, discard, port, __data__ だけが許されています。

__data__ 属性は汎用の辞書で、必要に応じて任意の値を入れられます (Cookie をサブクラス化する場合に便利です)。

expires 属性の値は、設定時に"Wdy, DD-Mon-YYYY HH:MM:SS GMT" の 形式 (Netscape のクッキー仕様で定義されている形式) またはエポックからの経過秒数 (この値は自動的に GMT における正しい時刻文字列に変換されます) のいずれかに なっているかチェックを受けます。不正な expire 値を指定すると ValueError を送出します。

Cookie オブジェクトを文字列に変換すると、"Cookie" や "Set-Cookie" ヘッダの値として使える正しい形式の文字列になります。

注意: Python 標準ライブラリのCookie クラスと違い、このクラスは 単一のクッキーを表現しています (Python 標準ライブラリではMorsel に相当します)。

parse( string)
この関数は、ヘッダの値として渡されるクッキー表現文字列 (cookie string) string からCookie インスタンスを生成する際に使う クラスメソッドです。クッキー表現文字列の解析の過程で、各属性名は全て 小文字に変換されます。

このメソッドはクラスメソッドなので、クラス名を明示的に指定して呼び出さねば なりません。

このメソッドは単一のCookie インスタンスではなくCookie インスタンスの入った辞書を返します。

単一のCookie インスタンスをクッキー表現文字列から取り出す例を 以下に示します:

mycookies = Cookie.parse("spam=eggs; expires=Sat, 14-Jun-2003 02:42:36 GMT")
spamcookie = mycookies["spam"]

注意: このメソッドでは辞書を使っているため、名前の重複する複数のクッキーは扱えません。 一つのクッキーに複数の値を持たせたい場合には、MarshalCookie の 使用を検討してください。

クラス SignedCookie( name, value, secret[, attributes])

Cookie のサブクラスです。このクラスで生成されるクッキーの名前と 値は、secret に指定した暗号鍵を使って自動的に署名されます。 secret を空文字列にしてはなりません。

parse( string, secret)
Cookie.parse() と同じようにふるまいますが、クッキーが正しく 署名されているかどうかを調べます。署名を検証できない場合、Cookie クラスのオブジェクトを返します。

注意: SignedCookie.parse() の返すオブジェクトの型は必ず調べるように してください。オブジェクトがCookie のインスタンスである場合 (SignedCookie でない場合)、署名の検証に失敗しています:
# assume spam is supposed to be a signed cookie
if type(spam) is not Cookie.SignedCookie:
    # do something that indicates cookie isn't signed correctly

クラス MarshalCookie( name, value, secret[, attributes])

SignedCookie のサブクラスです。このクラスを使うとvalue を任意の整列化(marshal)可能なオブジェクトにできます。文字列、整数、リスト などといったコアの Python データ型は全て整列化できます。 整列化できるオブジェクトの完全なリストは marshalモジュールのドキュメントを参照してください。

クッキー解析時、まず署名をチェックします。従って、正しく署名されていないクッキーは 整列化状態から戻せません。