有两个UIWebView单独的cookie存储?

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

我试过了什么?
我认为解决scheme是在两个UIWebView实现不同的cookie存储。

Sasmito Adibowo写了一篇文章“ 实现您自己的Cookie存储” ,其中提供了有关如何在Mac上为WebView使用自定义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 

尽pipe它没有logging,但UIWebView确实支持上述方法之一,方法名称略有不同:

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

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

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

谢谢!

你有没有尝试在webViewDidStartLoad中获取与一个特定的web视图相关的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]; 

如果你愿意深入一点,那么以前着名的ASIHttpRequest就知道如何安排这一天。 阅读切换cookie存储的请求 。 他们也有一个有趣的UIWebView请求包装,AKA ASIWebPageRequest 。

可悲的是,该项目已经停止,但它应该为您提供一个实现您的目标的操作场。

否则,正如bdev所提出的,我会在发出请求之前将请求排队,并且每次replacecookie存储。 你可以在这里很好地使用调度器。