For Gauche 0.9.15Search (procedure/syntax/module):

Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.43 rfc.cookie - HTTPクッキー

Module: rfc.cookie

RFC 6265で定義されている「クッキー」情報を パースしたり構築したりするための手続きを定義しています。

Function: parse-cookie-string string :optional version

{rfc.cookie} リクエスト・ヘッダの Cookie の値のクッキー文字列 string を パースします。通常、CGI プログラムでは、同じ情報は環境変数 HTTP_COOKIE を通して利用できます。

リクエスト・ヘッダ Cookie2 を通してクッキーのバージョンが分かる 場合は、version へ整数のバージョンとして渡されなければなりません。 そうでなければ、parse-cookie-stringstring からバージョンを 取り出します。

結果は以下のフォーマットを持ちます。

((<name> <value> [:path <path>] [:domain <domain>] [:port <port>])
 …)

<name> は属性名で、<value> は対応する値です。 属性が値を持たない場合、<value>#f になります。 (属性が NULL 値を持つ場合は、"" となることに注意。) 属性がパスやドメイン、ポート番号のオプションを持つ場合は、 キーワード-値のペアの形式で与えられます。

註: 特定のクッキーの値を簡単に取り出すには rfc822-header-refが使えます (rfc.822 - RFC822メッセージ形式参照)。

Function: construct-cookie-string specs :optional version

{rfc.cookie} 与えられたクッキーの仕様のリストから、Set-cookie2Set-cookie ヘッダに適切なクッキー文字列を作ります。

オプションの version 引数は、互換性のために受容されますが無視されます。

クッキーの仕様は以下のフォーマットを持ちます。

(<name> <value> [:expires <data/time>] [:max-age <age>]
                [:domain <domain>] [:path <path>]
                [:secure <boolean>] [:http-only <boolean>]
<name>

文字列。クッキーの名前。

<value>

クッキーの値。文字列か、値が必要なければ #f

<domain> <path>

文字列。

<boolean>

真偽値。

<age>

非負の正確な整数。

<date/time>

整数(エポックからの秒数)か、Netscape のクッキー仕様に従うフォーマットされた 日付文字列か、<time>もしくは<date>オブジェクト (時間,および srfi.19 - 時間のデータ型と手続き参照)。

属性の指定は順不同です。属性値は適切にクォートされます。

互換性のために、古い規格(RFC2965, RFC2109, 古のNetscape cookie specificaiton) で指定されていたいくつかの属性も認識され出力に含められます (comment, comment-url, discard, port, version)。が、新規のコードではこれらの属性を使うべきではありません。

戻り値はそれぞれのクッキー文字列のリストです。(Set-cookie を使う) 古いスタイルのプロトコルでは、それぞれを独立したヘッダとして送らなければ なりません。(Set-cookie2 ヘッダを使う)新しいプロトコルでは、 それらをカンマで繋ぎ、一度に送ることができます。詳細は RFC6265 を見て下さい。

例:

(construct-cookie-string
   `(("name" "foo" :domain "foo.com" :path "/" :max-age 86400)))
 ⇒ ("name=foo;Domain=foo.com;Path=/;Max-age=86400")

Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]


For Gauche 0.9.15Search (procedure/syntax/module):