CocoaアプリでCookieを独自に管理する(その2)

d:id:RNatori:20081202の続き。
もう一度Studying HTTPをよく読むと、

http://www.studyinghttp.net/cookies
トップレベルドメインが "com", "edu", "net", "org", "gov", "mil", "int" の場合はピリオドが2つ以上、それ以外の場合はピリオドが3つ以上含まれていなければいけません。

って書いてあるから、前回の例でいくとwww.apple.comまではいいけどapple.comをドメインとして持つCookieはダメですね。

で、ちゃんと独自のCookieの管理には成功しました。T2HTTPCookieStorageというクラスを作って、NSHTTPCookieStorageと同じようなメソッドを実装。一発で動いたので嬉しい。

WebViewでの独自のCookieの使い方

自分でNSURLRequestやNSHTTPURLResponseを扱う場合はいいとして、WebViewではどうすればいいのか?
WebResourceLoadDelegateを使う。

- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource ;
- (void)webView:(WebView *)sender resource:(id)identifier didReceiveResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)dataSource ;

デリゲートメソッドでNSURLRequestの送信前に捉えてCookieを追加してやったり、NSURLResponseからCookieを取り出して保存したりしてやればいい。SafariのデフォルトであるCookieの受け入れのポリシー、「訪問したサイトのみ受け入れる」は多分、メインのドキュメントのURLに合致するCookieのみ受け入れてるんだろうな。*1

2chブラウザCookie

Thousandはこれで独自のCookieを管理出来るようになったけど、2chブラウザCookieの管理なんか必要なのだろうか。決めウチでよければ、HTTPのヘッダにCookie:とか書いて、適当に値を入れておけば2chに書き込むことは出来る。Cookieの保存などしなくても。
しかしこの場合、2ch側でCookieの仕様を変更するとちょっと困る。hana=mogera事件(事件?)がそれで、いろいろ2chブラウザがバージョンアップを余儀なくされた*2。そもそも2ch側が書き込みにCookieを要するのは、荒らし対策という意味があるらしいので、2chブラウザでも出来るだけCookieをちゃんと受け取るようにしたほうがいいはずだ。と思うんだけど。

*1:別サイトの画像などについてくるCookieをはじく

*2:Thousandは無事だった。いぇい