iOS-WKWebView设置 Cookie

作者: 路飞_Luck | 来源:发表于2019-02-15 20:36 被阅读52次
    一. UIWebView

    在使用 UIWebView 的时候,我们是通过 NSHTTPCookieStorage 来管理 cookie 的,我们给 momo.domain.com 域名添加一个名字为 user 的 cookie,代码类似下面。

    NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
    [cookieProperties setObject:@"user" forKey:NSHTTPCookieName];
    [cookieProperties setObject:@"xxxxxx" forKey:NSHTTPCookieValue];
    [cookieProperties setObject:@"momo.domain.com" forKey:NSHTTPCookieDomain];
    [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    

    这样就完成了给UIWebView设置 cookie 的工作。

    在 WKWebView 中通过 NSHTTPCookieStorage 来设置 cookie 是行不通的,要通过 URLRequest 来添加 cookie 才能起效果 。代码类似下面。

    二. WKWebView
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://momo.domain.com"]];
    NSDictionary *headFields = request.allHTTPHeaderFields;
    NSString *cookie = headFields[@"user"];
    if (cookie == nil) {
          [request addValue:[NSString stringWithFormat:@"user=%@", @"userValue"] forHTTPHeaderField:@"Cookie"];
        }
    [self.webView loadRequest:request];
    

    你以为 WKWebView 添加 cookie 就这样结束了 ? 其实远远没有。上面通过 URLRequest 来添加 cookie 的方式只能对 WKWebView loadRequest 的那个 request 起作用,如果你的 WKWebView 加载的 Web 页面包含了 ajax 请求的话,那 cookie 又要重新处理了,这个处理需要在 WKWebView 的 WKWebViewConfiguration 中进行配置。代码类似下面。

    //应用于 ajax 请求的 cookie 设置
    WKUserContentController *userContentController = WKUserContentController.new;
    NSString *cookieSource = [NSString stringWithFormat:@"document.cookie = 'user=%@';", @"userValue"];
    
    WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource:cookieSource injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
    [userContentController addUserScript:cookieScript];
    
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    config.userContentController = userContentController;
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://momo.domain.com"]];
        
    // 应用于 request 的 cookie 设置
    NSDictionary *headFields = request.allHTTPHeaderFields;
    NSString *cookie = headFields[@"user"];
    if (cookie == nil) {
      [request addValue:[NSString stringWithFormat:@"user=%@", @"userValue"] forHTTPHeaderField:@"Cookie"];
    }
    
    self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:config];
    [self.webView loadRequest:request];
    
    三 使用Safari调试 cookie

    1.首先先用真机或者模拟器打开一个网页
    2.打开Safari,然后选择开发选项


    image.png

    3.选择 存储空间 -> cookie 管理,即可看到相关 cookie 了


    image.png

    本文参考 WKWebView 设置 Cookie


    同类文章参考

    1.《 WKWebView 那些坑》
    2.献上苹果工程师在官方论坛的一个关于 WKWebView Cookie 问题的答复

    相关文章

      网友评论

        本文标题:iOS-WKWebView设置 Cookie

        本文链接:https://www.haomeiwen.com/subject/btvmeqtx.html