如何从WKwebview(IOS)获取cookie

时间:2016-06-28 05:19:06

标签: ios objective-c cookies wkwebview

我希望通过WKwebview收到包含登录状态的Cookie。

我最终想要的是接收cookie数据,解析它们,然后更改登录用户的视图。

我累了: webview.evaluateJavascript(" document.cookie.search(' LoginSession = Y')"){(数据,错误) - > ..... }

结果:如果数据是'数据> = 1',登录状态(IOS app中的变量)= true,但在0(数据< 0)下,登录状态将为false。

它就像我的应用程序的魅力看似

然而,这种方式看起来非常简单,所以我认为,对于某些用户而言,它可能并不安全,并且可能无法保证在IOS的所有环境中都能完美地工作。

Q1:这不危险吗?

Q2:我听说IOS将cookie存储在内存中,与其他平台不同,我们可以设法通过一些代码从内存中加载cookie数据。是否有任何推荐的库供开发人员处理来自WKWEB的cookie?

2 个答案:

答案 0 :(得分:0)

我试过这个。 Javascript以“key = value;”形式返回包含所有cookie的单个字符串 我不知道它有多稳定。希望它有所帮助。

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{

    [webView evaluateJavaScript:@"document.cookie;" completionHandler:^(NSString *result, NSError *error)
     {
     NSLog(@"Error getting cookies: %@",error);
     [self updateCookies:result];
     }];
 }

答案 1 :(得分:-1)

礼貌:Siyu Song的Answer

您可以NSHTTPURLResponse上定义的- webView:decidePolicyForNavigationResponse:decisionHandler:方法访问WKNavigationDelegate个对象。您可以稍后从HTTP标头中手动提取Cookie:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@""]];
    for (NSHTTPCookie *cookie in newCookies) {
        // Do something with the cookie
    }

    decisionHandler(WKNavigationResponsePolicyAllow);
}

如果你有更好的解决方案,请发布你的解决方案。

相关问题