クッキーの扱いに関するルールをまとめておく。
(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