iOS WebView带cookie请求URL

作者: YvanLiu | 来源:发表于2017-07-05 17:13 被阅读116次

    今天做了一个简单的原生与H5交互,需要同步登陆信息,定的方案是把用户名、用户ID、token放在cookie里面,加载页面的时候传过去。分享一下。

    先来创建一个webview
    self.webview = [[UIWebView alloc] initWithFrame:self.view.bounds];
    self.webview.delegate = self;
    self.webview.backgroundColor = [UIColor clearColor];
    [self.view addSubview: self.webview];
    
    UIWebViewDelegate
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSLog(@"当前链接   %@",request);
        return YES;
    }
    - (void)webViewDidStartLoad:(UIWebView *)webView {
        NSLog(@"开始加载网页");
    }
    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        NSLog(@"网页加载完毕");
    }
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
        NSLog(@"网页加载出错");
    }
    
    然后我们来加cookie
    • 网上能找到一堆加cookie的方法,大部分是用的NSHTTPCookieStorage
    • 因为我要加3条cookie,所以我直接用了循环。
    • 要加完cookie之后再load页面。
    NSArray *keys   = @[@"hjfapp_token",@"hjfapp_id",@"hjfapp_name"];
    NSArray *values = @[user.token,user.user_id,user.member_num];
    for (int i = 0; i<keys.count; i++) {
     
        NSMutableDictionary *cookieProperties = [[NSMutableDictionary alloc]init];
        [cookieProperties setObject:keys[i] forKey:NSHTTPCookieName];
         [cookieProperties setObject:values[i] forKey:NSHTTPCookieValue];
         [cookieProperties setObject:@"site-test.beanz.cn" forKey:NSHTTPCookieDomain];
         [cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
         [cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
         [cookieProperties setObject:[[NSDate date] dateByAddingTimeInterval:2629743] forKey:NSHTTPCookieExpires];
         NSHTTPCookie *cookieuser = [[NSHTTPCookie alloc]initWithProperties:cookieProperties];
         [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieuser];
       }
    }
    NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:self.url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20];
    [self.webview loadRequest:request];
    
    
    现在可以说一下我要写这个的原因了

    因为我之前再拼这个cookie的时候,给NSHTTPCookieDomain传的是空,H5那面直接从页面拿cookie拿不到,所以我搞了差不多一天,试了各种加cookie的方法。好丢脸(\捂脸)

    最后咱们一个一个说一下这些都干嘛的
    • <b>NSHTTPCookieName</b>:这个就是你要传的cookie的名字了,key。
    • <b>NSHTTPCookieValue</b>:这个就是对应的value了。
    • <b>NSHTTPCookieDomain</b>:domain翻译过来是域名,NSHTTPCookieStorage是有方法设置只接受一类域名下的cookie,或者全部接受的。之前应该是H5那面不接受其他域名下的cookie,不太懂,有懂的请留言,谢谢。
    • <b>NSHTTPCookiePath</b>:path如果没有指定的话用‘/’就可以。
    • <b>NSHTTPCookieExpires</b>:cookie的有效期。
    • <b>NSHTTPCookie</b>:NSHTTPCookie对象代表一个HTTP cookie。 这是一个不可改变的对象,从一个包含cookie的属性的字典初始化,这个类可以用来手动创建cookie的Properties 。
    • <b>NSHTTPCookieStorage</b>:NSHTTPCookieStorage提供了管理所有NSHTTPCookie 对象的接口在OS X里,cookie是在所有程序中共享的,而在iOS中,cookie只当当前应用中有效。

    相关文章

      网友评论

      • 布袋的世界:一点也不丢脸,偶昨天下午搞到现在,还没有搞出来!

      本文标题:iOS WebView带cookie请求URL

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