我使用WKWebView来处理我的应用程序的登录过程。我需要在WKWebView和HTTCookieStorage之间同步cookie。
每个导航响应之后,我已将JSESSIONID cookie从WKWebView迁移到HTTPCookieStorage。我的代码可在模拟器和iOS 11设备上使用。但是在iOS 12设备上,allHeaderFields不包含JSESSIONID cookie。在iOS 12设备上的navigationResponse对象上的任何地方都看不到JSESSIONID cookie,而在iOS 11设备上该对象包含JSESSIONID。服务器对两个设备的响应都相似。
这个问题有什么原因和解决方案吗?
public func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
//Migrate web cookies to native for WKWebView
if let httpResponse = navigationResponse.response as? HTTPURLResponse {
if let headerFiles = httpResponse.allHeaderFields as? [String: String] {
if let url = httpResponse.url {
let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFiles, for: url)
if (cookies.count > 0) {
HTTPCookieStorage.shared.setCookies(cookies, for: url, mainDocumentURL: url)
}
}
}
}
decisionHandler(.allow)
}