为了账号安全,请及时绑定邮箱和手机立即绑定

从WKWebView获取所有cookie

从WKWebView获取所有cookie

慕斯王 2019-12-17 15:25:37
使用来获取Cookie UIWebView似乎很简单NSHTTPCookieStorage.sharedHTTPCookieStorage(),它似乎WKWebView将Cookie存储在其他位置。我做了一些研究,然后从NSHTTPURLResponse对象中获取了一些Cookie 。但是,其中不包含WKWebView:func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {  if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {    if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {      let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url)      for cookie in cookies {        logDebug(cookie.description)        logDebug("found cookie " + cookie.name + " " + cookie.value)      }    }  }}奇怪的是WKWebsiteDataStore,ios 9中还有一个类负责管理中的cookie WKWebView,但是,该类不包含检索cookie数据的公共方法:let storage = WKWebsiteDataStore.defaultDataStore()storage.fetchDataRecordsOfTypes([WKWebsiteDataTypeCookies], completionHandler: { (records) -> Void in  for record in records {    logDebug("cookie record is " + record.debugDescription)    for dataType in record.dataTypes {      logDebug("data type is " + dataType.debugDescription)      // get cookie data??    }  }})是否有解决方法来获取Cookie数据?
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

所使用(创建)的Cookie WKWebView实际上已正确存储在中NSHTTPCookieStorage.sharedHTTPCookieStorage()。


问题在于WKWebView不会立即写回cookie。我认为它按自己的时间表进行。例如,当a WKWebView关闭或定期关闭时。


因此,最终它们确实会出现在那儿,但是何时是不可预测的。


您可以NSHTTPCookieStorage通过关闭来强制“同步”到共享WKWebView。请让我们知道是否可行。


更新:我只记得在iOS的Firefox中,我们WKWebView通过用WKProcessPool新的替换它来强制刷新其内部数据(包括cookie)。没有官方的API,但是我可以肯定,这是目前最可靠的解决方法。


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 1876 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信