ios - 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)
}
解决方案
推荐阅读
- javascript - 组件内的Vue.js组件,操作父数据
- r - R - 将重复的行值重塑为列
- django - Django API:从请求中获取经过身份验证的用户
- django - Django:将 kwargs 参数从 get_context_data() 添加到 ModelForm
- r - 将 Rcpp 函数放入 R 包后的性能故障
- php - Wordpress,html表单仅在缺少字段时运行php,如果所有字段均已填写则给出404?
- ag-grid - Accessing state with Ag-grid
- scheme - 使用 Scheme 计算后缀表达式的程序
- r - 将不同数据框中的相同列名相乘
- python - 无法在内存缓冲区中捕获行为日志事件以供以后显示或查询