美文网首页
iOS WKWebView的cooKie问题小记

iOS WKWebView的cooKie问题小记

作者: Code_Bee | 来源:发表于2018-03-06 16:51 被阅读0次

    WKWebView好用加载速度快,但相比较UIWebView,同步cookie就比较头疼,想要放弃WKWebView的应该不止我一个。

    设置cookie一般想到的就是从NSHTTPCookieStorage中取出,然后添加到请求头。如下:

    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary]; NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""]; NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];

    for (NSHTTPCookie *cookie in [cookieJar cookies]) {

    [cookieDic setObject:cookie.value forKey:cookie.name];

    } // cookie重复,先放到字典进行去重,再进行拼接

    for (NSString *key in cookieDic)

    {

    NSString *appendString = [NSString stringWithFormat:@"%@=%@;", key, [cookieDic valueForKey:key]];

    [cookieValue appendString:appendString];

    }

    NSLog(@"添加的cookie的值是%@",cookieValue);

    [req addValue:cookieValue forHTTPHeaderField:@"Cookie"];

    这种方式添加的cookie有时效性,且难以同步。那么怎么解决呢,这时候就需要在发送请求后,NSHTTPURLResponse中取出cookie保存到本地,然后添加到WKUserScript里

    NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; NSString *cookie = [response allHeaderFields][@"Set-Cookie"];

    NSString *value = [[NSUserDefaults standardUserDefaults] objectForKey:@"userCookie"];

    NSString *cookie = [NSString stringWithFormat:@"document.cookie = 'ana=%@;path=/';",value];

    WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource: cookie injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]; [configuration.userContentController addUserScript:cookieScript];

    document.cookie路径视情况自己调整。这次添加完美解决了我遇到的问题,没写过文章,就只是记录一下问题和解决过程。希望对别人有帮助,以后再改进。

    相关文章

      网友评论

          本文标题:iOS WKWebView的cooKie问题小记

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