首页 > 解决方案 > UIWebView 和 WKWebView 中的 cookie 是如何管理的?

问题描述

我正在从 UIWebView 迁移到 WKWebView 并面临 cookie 管理问题。由于应用程序需要支持 iOS 10,我没有通过 WKHTTPCookieStore 添加 cookie,而是遵循以下代码:

- (void)loadURL:(NSString *)url
{
    NSMutableURLRequest * req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray* cookies = [storage cookiesForURL:[NSURL URLWithString:url]];

    NSMutableString *cookieStr = [NSMutableString string];
    for (NSHTTPCookie *cookie in cookies) {
           if (cookieStr.length) {
               [cookieStr appendString:@"; "];
           }
           [cookieStr appendFormat:@"%@=%@", cookie.name, cookie.value];
    }
    NSLog(@"Cookie: %@",cookieStr);
    [req addValue:cookieStr forHTTPHeaderField:@"Cookie"];

    NSMutableString *cookieStrAfterDocLoad = [NSMutableString string];
    for (NSHTTPCookie *cookie in cookies) {
        [cookieStrAfterDocLoad appendFormat:@"document.cookie = '%@=%@';", cookie.name, cookie.value];
    }

    WKUserScript *userScript = [[WKUserScript alloc] initWithSource: cookieStrAfterDocLoad
                                                      injectionTime: WKUserScriptInjectionTimeAtDocumentStart
                                                   forMainFrameOnly:NO];

    [self.wkWebView.configuration.userContentController addUserScript:userScript];

    [self.wkWebView loadRequest:req];
}

我需要在文档加载后添加 cookie 以维护内部导航会话。这不是正确的方法,因为可能会在页面加载时添加新的 cookie 或修改旧的 cookie。这需要在许多其他控制器中完成。

我的问题是如何知道是否在 UIWebview 中为 loadRequst 添加了 cookie,或者是否有任何其他正确的方法可以在 WKWebview 中处理这种情况,因为某些网页加载可能不需要 cookie?这是为每个 loadRequest 添加 cookie 的正确方法吗?

标签: iosobjective-ccookieswkwebview

解决方案


推荐阅读