美文网首页
WKWebView 设置cookie问题:

WKWebView 设置cookie问题:

作者: 贾代表 | 来源:发表于2017-08-21 20:11 被阅读59次

问题情境:首先要找到cookie,那么针对登录认证后的一种状态,如何通过设置HTTP 的header来访问一个H5的页面

前篇

1.为什么要有Cookie 这种东西?

因为HTTP传输是无状态的,比如在A访问到B  ,A的信息是无法传到B  ,所以这种会话控制 是非常重要

2.用现实生活的例子来举类说明cookie产生的意义

工商          卫生部门

|                    |

|                需要张三的营业执照来给他办卫生执照,但是张三的疑问是他们不都是办证的,而且联网的,为什么不知道啊?这是            因为他们之间是无状态的。所以在张三要办卫生执照的时候,卫生部门要求的营业执照不能从工商局得到,但是可以用张三的公文包将营业执照给卫生部门。

营业执照

张三

3.所以服务器是在客户端放了一些文件包到客户端

4.哪个服务器写入了一些cookie,服务器端写入了一些cookie,是要求客户端加入一些cookie

5.用cookie认证,是要把获取到的cookie值,加入到下一次要请求的头中,这样保证是一个流程下的认证。将cookie这个公文包里的有用证件传给下个请求连接。

此次注册认证:

遇到的问题: 第一步:获取公文包Cookie    第二步:将该公文包加到注册一的请求中    第三步:将该公文包加到注册二的请求中。

解决步骤

(1)第一步先获取到cookie

因为登录成功后,响应体的头中的set-cookie就是可以共享的cookie

所以第一步获取cookie(我用的是NSURLSession网络请求)

/**获取当前cooki*/

//1)获取响应体的头

NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;

NSDictionary *allHeaders = response.allHeaderFields;

//2)获取响应体头中的cookie

NSString *cookieStringFromHeader = [allHeaders valueForKey:@"Set-Cookie"];

NSLog(@"set-cookie = %@",cookieStringFromHeader);

(2)第二步 将获取到cookie ,存放入NSUserDefualt中

//将cookie存放到NSUserDefault

[[NSUserDefaults standardUserDefaults] setObject:cookieStringFromHeader forKey:@"cookieStringFromHeader"];

//同步

[userDefaults synchronize];

(3)第三步WKWebView  加入cookie

//初始化

//获取cookie

NSString *currentCookie = [[NSUserDefaults standardUserDefaults] objectForKey:@"cookieStringFromHeader"];

//1)创建一个内容交互控制器

WKUserContentController* userContentController = WKUserContentController.new;

//所注入的JS 对象就是cookieScript

WKUserScript * cookieScript = [[WKUserScript alloc] initWithSource:currentCookie injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

//在交互控制器中注入对象cookieScript

[userContentController addUserScript:cookieScript];

//配置webViewConfig

WKWebViewConfiguration* webViewConfig = WKWebViewConfiguration.new;

//设置应用改配置的交互控制器对象为userContentController

webViewConfig.userContentController = userContentController;

WKWebView *currentWebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:webViewConfig];

NSString *urlString = [NSString stringWithFormat:@"%s/case/form/%@",APPURL,self.model.templateId];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];

//请求

[request setValue:currentCookie forHTTPHeaderField:@"Cookie"];

[currentWebView loadRequest:request];

[self.view addSubview:currentWebView];

😁 有帮助到你就点个赞呗!😁

相关文章

网友评论

      本文标题:WKWebView 设置cookie问题:

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