• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 从 WKWebView 获取所有 cookie

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:27:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

虽然使用 NSHTTPCookieStorage.sharedHTTPCookieStorage()UIWebView 获取 cookie 似乎很简单,但似乎 WKWebView 将 cookie 存储在其他地方。

我做了一些研究,我能够从 NSHTTPURLResponse 对象中获取一些 cookie。然而,这并不包含 WKWebView 使用的所有 cookie:

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)
      }
    }
  }
}

奇怪的是,ios 9 中还有一个类 WKWebsiteDataStore 负责管理 WKWebView 中的 cookie,但是该类不包含检索 cookie 数据的公共(public)方法:

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 数据的解决方法?



Best Answer-推荐答案


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

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

所以最终他们确实会在那里结束,但何时是不可预测的。

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

更新:我只记得在 Firefox for iOS我们强制 WKWebView 刷新其内部数据,包括 cookie,方法是将其 WKProcessPool 替换为新的。没有官方 API,但我很确定这是目前最可靠的解决方法。

关于ios - 从 WKWebView 获取所有 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834699/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap