NSHTTPCookie の挙動で一つ気がついたことがある。
domain="www.xcatsan.com" のクッキーをサーバから送り、それを NSHTTPCookie へ渡すと domain=".www.xcatsan.com" となる( . ドットが頭につく)。
<NSHTTPCookie version:0 name:@"testname" value:@"testvalue"
expiresDate:@"(null)" created:@"273711615.645900" sessionOnly:TRUE
domain:@".www.xcatsan.com" path:@"/system" secure:FALSE
comment:@"(null)" commentURL:@"(null)" portList:(null)>,
そういう仕様かと思いきや他のサイトのクッキーを眺めていると頭に . が付かないものがあった。
<NSHTTPCookie version:0 name:@"GoogleAccountsLocale_session" value:@"ja"
expiresDate:@"(null)" created:@"273711677.501391" sessionOnly:TRUE
domain:@"www.google.co.jp" path:@"/accounts" secure:FALSE
comment:@"(null)" commentURL:@"(null)" portList:(null)>,
この差はなんだろうか。気になって調べてみた。
:
:
原因は単純でサーバ側がクッキーをセットする時に domain指定しているか、していないかで . の有無が決まる。
- Set-Cookie: domain指定なし => 頭に.が付かない(例)"www.xcatsan.com"
- Set-Cookie: domain指定あり => 頭に.が付く(例)".www.xcatsan.com"
分かってみれば単純だった。前者は送出元のサーバに限定されたクッキー、後者は指定ドメインに一致するクッキーとなる。