如何从 WKwebview 获取 cookie (IOS)

How to get cookie from WKwebview (IOS)

我想通过 WKwebview 接收包含登录状态的 cookie。

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

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

结果:如果数据为'data >= 1',登录状态(IOS应用程序中的一个变量)= true,但在0(数据<0)下,登录状态将为false。

对于我的应用来说,它似乎 很有魅力。

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

Q1:这样不危险吗?

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

由宋思雨提供 Answer

您可以访问 WKNavigationDelegate 上定义的 - webView:decidePolicyForNavigationResponse:decisionHandler: 方法中的 NSHTTPURLResponse object。您稍后可以从 HTTP header:

中手动提取 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);
}

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

我试过了。 Javascript returns 一个包含所有 cookie 的字符串 "key=value;" 我不知道它有多稳定。希望对你有帮助。

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

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