ページ

2009年9月7日月曜日

NSHTTPCookieのドメインに . が付く、付かない?

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

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"



分かってみれば単純だった。前者は送出元のサーバに限定されたクッキー、後者は指定ドメインに一致するクッキーとなる。