问题情境:首先要找到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];
😁 有帮助到你就点个赞呗!😁