クッキー送出の処理で、同じドメイン内で同じ名前を持つクッキーがある場合はより詳細な方を返す。
例)pathが "/acme" と "/acme/ammo" で同じ nameの Cookieが存在する場合、
a) リクエストURLのパスが "/acme/ammo/test.html" の場合、後者を返す
b) リクエストURLのパスが "/acme/parts/some.html" の場合、前者を返す
前回のコードをこれに合わせて書き換えてみる。
XCHTTPCookieStorage.m
- (NSArray *)cookiesForURL:(NSURL *)URL
{
// NSMutableArray* return_cookies = [NSMutableArray array];
NSMutableDictionary* cookie_dicts = [NSMutableDictionary dictionary];
:
NSHTTPCookie* stored_cookie;
if (stored_cookie = [cookie_dicts valueForKey:cookie_name]) {
if ([cookie_path length] <= [[stored_cookie path] length]) {
continue;
}
}
// [return_cookies addObject:cookie];
[cookie_dicts setObject:cookie forKey:cookie_name];
}
// return return_cookies;
return [cookie_dicts allValues];
}
該当するクッキーを格納するクラスを、NSMutableArrayをやめて NSMuableDictionaryに変更する。キーにクッキーの名前を使うことで同一のドメイン内のクッキーの名前はユニークになる。同一の名前が存在する場合は、詳細な方=すなわちパスが長い方を選ぶようにした。