WKHTTPCookieStore没有检索设置的Cookie。

Mar*_*ges 6 nshttpcookie wkwebview ios11 wkhttpcookiestore

我正在尝试以编程方式设置Cookie,但无法正常工作。Cookie给人的印象是有效。然后,将其设置在上WKWebsiteDataStore.default().httpCookieStore。然后,在异步回调中,我尝试将所有cookie从商店中取出。但是,我的cookie不在那里。哪里去了!?

    let httpCookieStore = WKWebsiteDataStore.default().httpCookieStore

    var cookieProperties = [HTTPCookiePropertyKey: Any]()
    cookieProperties[.name] = "MarkCookie"
    cookieProperties[.value] = "MarkValue"
    cookieProperties[.domain] = "localhost"
    cookieProperties[.maximumAge] = 1234
    cookieProperties[.path] = "/"

    let cookie = HTTPCookie(properties: cookieProperties)!

    httpCookieStore.setCookie(cookie) {
        // This is called fine. The cookie looks ok. 
        print("Cookie set \(cookie)")

        DispatchQueue.main.async {
            httpCookieStore.getAllCookies { cookies in
                // This is empty!!!!
                print(cookies)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Rob*_*Rob 1

我正在测试并在控制台上为我设置的每个 cookiesetCookie收到一条令人烦恼的\xe2\x80\x9ccrash\xe2\x80\x9d 消息(尽管我的应用程序本身实际上并没有崩溃)。NetworkProcessProxy::didClose并且 fetch getAllCookies(或async方法,allCookies在我的例子中)返回一个空数组。

\n

因此,想知道问题是否出在 中getAllCookies,我决定实际打开 a WKWebView,以便我可以查看 cookie 是否确实被传递(即,尝试确定问题是否是 cookie 本身,还是某些特殊的 API 行为)。但是,一旦我真正WKWebView加载了有问题的页面,所有后续调用都成功了,我对/setCookie的调用也是如此。getAllCookiesallCookies

\n

我还没有完全追踪到它,但看起来需要进行一些 WebKit 初始化,WKWebView如果没有其他事情的话,可以通过加载 来解决一些问题。挑战在于,虽然我之前遇到了困难,没有克服这个错误,但现在我已经成功加载了WKWebView,我无法再重现该错误。(我尝试清空 \xe2\x80\x9c 派生数据\xe2\x80\x9d 文件夹,尝试在新项目或新域中,在 Safari 中手动删除该域的存储数据等。这些都不会重现错误。 ) 哈哈。

\n