ページ

2009年9月16日水曜日

NSHTTPCookieStorage相当のクラスを自前で実装する (14) 仕様まとめと最新コード

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

クッキーの扱いに関するルールをまとめておく。
(XCHTTPCookieStorage の仕様に相当する)

1. 基本ルール
 ・クッキーは、ドメイン、パス、名前の3つの組み合わせをキーとして扱う。
 ・クッキーを保存する場合、同一のキーが存在する場合は上書きする。


2. ドメインのルール

(1) 受け入れルール
・gTLD (global Top Level Domain) のみは受け入れる。
・国毎に規定される Effective TLD に該当するものは受け入れる。
 (リンク:Effective TLD Service
 プログラムでは effective_tld_names.dat を使用している。

・上記に加え、NSHTTPCookieAcceptPolicy に従う。
 NSHTTPCookieAcceptPolicyAlways:無条件にクッキーを受け入れる。
 NSHTTPCookieAcceptPolicyNever:無条件にクッキーを受け入れない。
 NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:
   リクエストURLのドメインと後方一致する場合のみ受け入れる。

クッキードメイン:.xcatsan.com
リクエストURLホスト:
 www.xcatsan.com => OK
 jango.www.xcatsan.com => OK
 xcatsan.com => OK(先頭に . が無い場合も OK)


(2) 送出ルール
・クッキーのドメインがリクエストURLのホスト名と後方一致する場合に送出する。
(OK)クッキードメイン:.xcatsan.com
    リクエストURLホスト:www.xcatsan.com

・クッキーのドメインの先頭に . が付く場合、これを取り除いて一致する場合も送出する。
(OK)クッキードメイン:.www.xcatsan.com
    リクエストURLホスト:www.xcatsan.com

 

3. パスのルール

(1) 送出ルール
 ・クッキーのパスがリクエストURLのパスと前方一致する場合に送出する。
クッキーパス:/a
リクエストURLパス:
 /a/catsan.html => OK
 /a/b/c/mikeneko.html => OK
 /x/a/catsan.html => NG
 /abc/catsan.html => NG


 ・同じドメイン内で同じ名前を持つクッキーが存在する場合は、より詳細な方を返す。
例)クッキーのパスが "/acme" と "/acme/ammo" で同じ nameの Cookieが存在する場合、
 a) リクエストURLのパスが "/acme/ammo/test.html" の場合、後者を返す
 b) リクエストURLのパスが "/acme/parts/some.html" の場合、前者を返す



4. その他のルール

(1) Secure 指定がある場合は、リクエストのURLスキームが https の場合のみ該当するクッキーを送出する。
(2) 有効期限が切れたクッキーは送出しない。またファイルへ書き出さない(既にファイル内に存在する場合は削除する)。
(3) SessionOnly 指定がある場合は、ファイルへ書き出さない。


* ドメインの受け取りルールの適用例
com => NG
.com => NG
xcatsan.com => OK
.xcatsan.com => OK
www.xcatsan.com => OK
jp => NG
.jp => NG
xcatsan.jp => OK
.xcatsan.jp =>OK
co.jp => NG
.co.jp => NG
xcatsan.co.jp =>OK
www.xcatsan.co.jp =>OK
tokyo.jp => NG
.tokyo.jp => NG
chiyoda.tokyo.jp =>NG
metro.tokyo.jp => OK
www.chiyoda.tokyo.jp =>OK



- - - -
さらにソースコードに若干修正をいれた(フォルダ作成のタイミング、ファイル読み込み時のポリシー非適用など)。
最新版を掲載しておく。

ソースコード:CookieStorage-7.zip