gpt4 book ai didi

ios - 从 WKWebView 获取所有 cookie

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:43 26 4
gpt4 key购买 nike

虽然使用 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中的cookies,然而,该类不包含检索cookies数据的公共(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 数据的解决方法?

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com