今天做了一个简单的原生与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只当当前应用中有效。