12

背景
私は、ユーザーが同時に異なるログインで同じ Web サイトを閲覧できるようにする単純な iPad アプリケーションを開発しています。したがって、私は2つ持っており、ユーザーが最初のアカウントで1つのアカウントにログインし、2番目のアカウントで別のアカウントにUIWebViewログインできるように、異なるCookieストレージを持つ必要があります。UIWebViewUIWebView

私は何を試しましたか?
解決策は、私が持っている2つに異なるCookieストレージを実装することだと思いますUIWebView.

Sasmito Adibowo は、独自の Cookie ストレージの実装WebViewという記事を書きました。この記事では、Macでカスタム Cookie ストレージを使用する方法について詳しく説明しています。
これはWebView、送信する NSURLRequest を変更して Cookie ヘッダーを追加し、応答をインターセプトしWebViewて応答ヘッダーから Cookie を抽出し、独自の Cookie ストレージに保存することによって行われます。
技術的には、次の 2 つのデリゲート メソッドを実装することによって行われます。

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

文書化されていませんがUIWebView、わずかに異なるメソッド名で上記のメソッドの 1 つをサポートしていました。

- (NSURLRequest *)uiWebView:(UIWebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(id)dataSource

ただし、UIWebView同等のデリゲート メソッドwebView:resource:didReceiveResponse:fromDataSource:がないため、応答ヘッダーから Cookie を抽出できません。

質問カスタム Cookie ストレージを使用
しなければならない方法はありますか?UIWebViewUIWebView

ありがとう!

4

2 に答える 2

1

webViewDidStartLoad で特定の webview に関連付けられた (および保持している) Cookie を取得しようとしましたか:

NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
    [self.cookies addObject:cookie];
}

そして、これらの Cookie をすぐに保存します (self.cookies から値とキーを取得します):

NSMutableDictionary *cookieDict = [NSMutableDictionary dictionary];
[cookieDict setObject:@"value1" forKey:NSHTTPCookieName];
[cookieDict setObject:@"value2" forKey:NSHTTPCookieValue];
[cookieDict setObject:@"value3" forKey:NSHTTPCookieDomain];
...etc..

NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDict];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

また、viewDidLoad でこれを確認する必要があります。

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
于 2013-07-17T04:22:56.370 に答える
0

もう少し深く掘り下げたい場合は、かつて有名だったASIHttpRequestが、これをアレンジする方法を昔から知っていました。リクエストのスイッチング Cookie ストレージを読み取ります。また、UIWebView リクエスト用の興味深いラッパー、AKA ASIWebPageRequestもあります。

残念ながら、このプロジェクトはその後中止されましたが、目標を達成するための運用基盤を提供するはずです。

それ以外の場合は、bdev が提示したように、リクエストをキューに入れ、リクエストを発行する前に毎回 Cookie ストレージを置き換えます。ここでは、ディスパッチャをうまく使用できます。

于 2013-07-22T09:08:32.713 に答える