在我的应用程序中,我正在加载一个需要在 WKWebView 中进行身份验证的页面。在设备上,它总是在首次加载时进行身份验证,因为我有适当的 cookie 来对其进行身份验证。但是,如果我在模拟器上“擦除所有内容设置”(在顶部栏中的“硬件”菜单下),那么 Web 视图的第一次加载总是未经身份验证的(即使我有正确的 cookie),随后的加载是始终经过身份验证。
这不会在设备上发生,并且在我设置断点时也不会发生,这意味着它是某种与模拟器相关的竞争条件。
这是我用于从我的 Web 视图中从常规 cookie 存储更新 cookie 的代码。
let webView = WKWebView(frame: containerView.bounds, configuration: WKWebViewConfiguration())
webView.navigationDelegate = navigationDelegate
containerView.addAndFillSubview(webView)
guard let sharedCookies = HTTPCookieStorage.shared.cookies else {
return
}
// For each cookie in the common store, set it in the WKWebView's store.
for sharedCookie in sharedCookies {
// Add a block to the dispatch group every time a cookie begins to be set in the WKWebView's store.
wkSetCookieDispatchGroup.enter()
webView.configuration.websiteDataStore.httpCookieStore.setCookie(sharedCookie) {
// Release a block from the dispatch group every time a cookie is successfully set in the WKWebView's store.
wkSetCookieDispatchGroup.leave()
}
}
// Wait for all the cookies to be successfully set (all blocks in the wkSetCookieDispatchGroup to be released)
wkSetCookieDispatchGroup.notify(queue: .main) {
// Load url in webView
}
我在这里做错了吗?这是关于我的身份验证 cookie 是“HTTPOnly”而 WebKit 没有正确处理它们的问题吗?其他人遇到过这个问题吗?