WKNavigationResponse在iOS 12上allHeaderFields不包含JSESSIONID

时间:2019-01-03 07:13:57

标签: ios wkwebview

我使用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)
}

0 个答案:

没有答案