首页 > 解决方案 > WKNavigationResponse allHeaderFields 在 iOS 12 上不包含 JSESSIONID

问题描述

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

标签: ioswkwebview

解决方案


推荐阅读