我目前对使用 WKWebView 显示网页的混合应用程序有疑问。
应用程序重新启动并创建新会话/WKWebWiew 后,Web 服务会为 WKWebView 提供一个新的登录 cookie。这在三分之二的尝试中都可以正常工作,但在某些情况下,登录 cookie 不会存储在 WKWebView (NSHTTPCookieStorage) 使用的共享 cookie 存储中。
(使用与 UIWebview 相同的 web 服务可以正常工作)
我尝试了网络分析工具,我可以看到网络服务正在向我发送新的 cookie。出于某种原因,WKWebView / NSURLRequest 不存储更新的登录 cookie。我读过 WKWebView 似乎会按预定的时间间隔更新 cookie,您可以通过更新 WKProcessPool 来强制它更新,但没有成功。
我一直在尝试使用以下方法从 Web 服务中读取登录 cookie:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
...
NSHTTPURLResponse *urlResponse = (NSHTTPURLResponse *)navigationResponse.response;
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:urlResponse.allHeaderFields forURL:urlResponse.URL];
...
但由于某种原因,会话 cookie/登录 cookie 在标题中不可见,我的猜测是由于某种原因它被 NSURL 隐藏,因为如果我通过设置关闭自动 Cookie 处理,我可以看到它们:
<NSMutableURLRequest>.HTTPShouldHandleCookies
然而,它确实给了我很多其他问题......
有没有人有类似的问题或任何意见?