4

在我的应用程序中,我正在加载一个需要在 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 没有正确处理它们的问题吗?其他人遇到过这个问题吗?

4

0 回答 0