技术文章 | iOS 防 DNS 污染方案调研 --- Cookie 业务场景

来源:互联网 发布:泰语自学软件 编辑:程序博客网 时间:2024/05/17 09:18

本文来源于阿里云-云栖社区,原文点击这里


本文将讨论下类似这样的问题:

  • WKWebView 对于 Cookie 的管理一直是它的短板,那么 iOS11 是否有改进,如果有,如何利用这样的改进?
  • 采用 IP 直连方案后,服务端返回的 Cookie 里的 Domain 字段也会使用 IP 。如果 IP 是动态的,就有可能导致一些问题:由于许多 H5 业务都依赖于 Cookie 作登录态校验,而 WKWebView 上请求不会自动携带 Cookie。

 WKWebView 使用 NSURLProtocol 拦截请求无法获取 Cookie 信息

iOS11推出了新的 API WKHTTPCookieStore 可以用来拦截 WKWebView 的 Cookie 信息

用法示例如下:

   WKHTTPCookieStore *cookieStroe = self.webView.configuration.websiteDataStore.httpCookieStore;   //get cookies    [cookieStroe getAllCookies:^(NSArray<NSHTTPCookie *> * _Nonnull cookies) {        NSLog(@"All cookies %@",cookies);    }];    //set cookie    NSMutableDictionary *dict = [NSMutableDictionary dictionary];    dict[NSHTTPCookieName] = @"userid";    dict[NSHTTPCookieValue] = @"123";    dict[NSHTTPCookieDomain] = @"xxxx.com";    dict[NSHTTPCookiePath] = @"/";    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];    [cookieStroe setCookie:cookie completionHandler:^{        NSLog(@"set cookie");    }];    //delete cookie    [cookieStroe deleteCookie:cookie completionHandler:^{        NSLog(@"delete cookie");    }];

 利用 iOS11 API WKHTTPCookieStore 解决 WKWebView 首次请求不携带 Cookie 的问题

问题说明:由于许多 H5 业务都依赖于 Cookie 作登录态校验,而 WKWebView 上请求不会自动携带 Cookie。比如,如果你在Native层面做了登陆操作,获取了Cookie信息,也使用NSHTTPCookieStorage 存到了本地,但是使用 WKWebView 打开对应网页时,网页依然处于未登陆状态。如果是登陆也在 WebView 里做的,就不会有这个问题。

 展开全文

原创粉丝点击