为两个UIWebView分别存储cookie?

how*_*ghk 12 cookies objective-c uiwebview ios

背景
我正在开发一个简单的iPad应用程序,允许用户同时浏览具有不同登录的同一网站.因此我有两个UIWebView,他们应该有不同的cookie存储,所以用户可以在第一个帐户登录UIWebView,另一个帐户登录UIWebView.

我试过了什么?
我认为解决方案是在UIWebView我拥有的两个中实现不同的cookie存储.

Sasmito Adibowo写了一篇文章实现自己的Cookie存储,它提供了有关如何WebView在Mac上使用自定义cookie存储的详细信息.
这是通过修改WebView要发送的NSURLRequest,向其添加cookie标头,并WebView从响应头拦截响应并从中提取cookie并将其保存到我们自己的cookie存储中来完成的.
从技术上讲,它是通过实现这两个委托方法来完成的:

- (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
Run Code Online (Sandbox Code Playgroud)

虽然它没有记录,UIWebView但确实支持上述方法之一,方法名称略有不同:

- (NSURLRequest *)uiWebView:(UIWebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(id)dataSource
Run Code Online (Sandbox Code Playgroud)

但是,UIWebView没有等效的委托方法webView:resource:didReceiveResponse:fromDataSource:,因此我无法从响应标头中提取cookie.

问题
有没有办法必须UIWebView使用自定义cookie存储,所以这两个UIWebView可以拥有自己的cookie存储?

谢谢!

bde*_*dev 1

您是否尝试过在 webViewDidStartLoad 中获取与特定 webview 关联的 cookie(并保留它们):

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

然后立即存储这些 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];
Run Code Online (Sandbox Code Playgroud)

您还需要在 viewDidLoad 中看到这一点:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
Run Code Online (Sandbox Code Playgroud)