美文网首页
WKWebView 的cookie 注入

WKWebView 的cookie 注入

作者: 轻轻语焉 | 来源:发表于2018-11-08 12:05 被阅读33次

WKWebView 同UIWebView 的cookie 管理机制还是不一样的。

UIWebView 、AFN 等等吧,可以通过 NSHTTPCookieStorage (单例类)统一管理,设置不同的域名、不同的cookieName、cookieValue。  

 WKWebView 没有用 NSHTTPCookieStorage 这个类管理cookie。所以想要给 WKWebView 注入cookie,有以下方法

1、JS注入   WKWebView初始化

WKUserContentController *userContentController = WKUserContentController.new;

 WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource:@"document.cookie ='cookieName=cookieValue';" injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];         

 [userContentController addUserScript:cookieScript];

WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc]init];

config.userContentController = userContentController;

WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0 , 100, 200 ) configuration:config ];

在WKWebView 初始化的时候,通过配置类,实现了注入cookie。

2、JS 注入 WKWebView 代理方法

 //js 注入cookie        

 [_webView evaluateJavaScript:@"document.cookie ='cookieName=cookieValue';" completionHandler:^(id result, NSError *error) {                                                                    //注入成功

}];

ps:如果进入当前页面就需要状态的时候,需要在初始化的时候写入cookie。在代理方法, -(void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler 里加入应该也可以,这点没有验证。

3、iOS 11 推出 WKHTTPCookieStore

 if (@available(iOS 11.0, *)) {                                         

   NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName: @"cookeName",NSHTTPCookieValue:@"cookieValue",NSHTTPCookieDomain:@"cookieDomain",NSHTTPCookiePath: @"/" }];

    [_webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:^{ }];  

}

4、在request 请求里加cookie

NSURL *url = [NSURL URLWithString:_urlStr];     

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

 [request setValue:@"cookieName=cookieValue" forHTTPHeaderField:@"Cookie"];

 [_webView loadRequest:request];

NOTICE:

JS注入的Cookie,比如PHP代码在Cookie容器中取是取不到的, javascript document.cookie能读取到,浏览器中也能看到。

NSMutableURLRequest 注入的PHP等动态语言直接能从$_COOKIE对象中获取到,但是js读取不到,浏览器也看不到

所以合理的办法让js,php,浏览器都能读取到相同的Cookie方法就是创建WebView的时候javascript注入Cookie,一开始发送NSMutableURLRequest请求的时候也要加上Cookie,并且保证两个地方的设置的cookie一致。

参考:http://www.skyfox.org/ios-wkwebview-cookie-opration.html

相关文章

网友评论

      本文标题:WKWebView 的cookie 注入

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