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をちゃんと受け取るようにしたほうがいいはずだ。と思うんだけど。