XCEffectiveTLDNames を使いドメインチェックを強化する。
といっても3行を加えるだけ。
NSHTTPCookieStorage.m
- (void)setCookie:(NSHTTPCookie *)cookie
{
if ([[XCEffectiveTLDNames sharedEffectiveTLDNames] isEffectiveTLDName:[cookie domain]]) {
return;
}
:
また、クッキー送出もとのサーバのドメインがクッキーで設定されているドメインと一致するかをチェックする。これはリクエストURLが必要なので -[setCookies:forURL:mainDocumentURL:] へ書いてみた。
- (void)setCookies:(NSArray *)cookies forURL:(NSURL *)URL mainDocumentURL:(NSURL *)mainDocumentURL
{
NSString* url_host = [URL host];
for (NSHTTPCookie *cookie in cookies) {
if ([url_host hasSuffix:[cookie domain]]) {
[self setCookie:cookie];
}
}
}
クッキーのドメインがリクエストURLホストの後方一致となるかをチェックする。
(例)リクエストURLのホスト:www.xcatsan.com
a) クッキードメインが .xcatsan.com の場合:OK
b) クッキードメインが www.xcatsan.com の場合:OK
c) クッキードメインが .mail.xcatsan.com の場合:NG
動作確認は、Googleのログインで成功した。大丈夫そうだ。
サンプル:CookieStorage-4.zip
- - - -
クッキー受取、送出が大体実装できた。残りは永続化の部分だな。