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存储?
谢谢!
您是否尝试过在 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)
| 归档时间: |
|
| 查看次数: |
2855 次 |
| 最近记录: |