【问题标题】:How to get cookie from WKwebview (IOS)如何从 WKwebview (IOS) 获取 cookie
【发布时间】:2016-11-26 01:06:47
【问题描述】:

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

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

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

结果:如果数据为'data >= 1',登录状态(IOS app中的一个变量)=true,但低于0(数据

它对我的应用程序看似就像一个魅力。

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

Q1 : 这不是危险的方式吗?

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

【问题讨论】:

    标签: ios objective-c cookies wkwebview


    【解决方案1】:

    我试过这个。 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];
         }];
     }
    

    【讨论】:

    • “updateCookies”方法有什么作用?你能添加“updateCookies”方法的代码吗?
    【解决方案2】:

    礼貌:宋思雨Answer

    您可以在WKNavigationDelegate 上定义的- webView:decidePolicyForNavigationResponse:decisionHandler: 方法中访问NSHTTPURLResponse 对象。您可以稍后从 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);
    }
    

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

    【讨论】:

    • 是的,你可以得到一些,但它仍然不是 cookie 的完整列表
    • 数组cookie总是为空的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多