项目中有些时候需要与前端配合,比如访问页面时给它传递所需的cookie信息。如何附带这些信息呢?其实系统已经封装好了相关的类和方法,以供所需。
知识要点
两个类:
- NSHTTPCookie
顾名思义,NSHTTPCookie对象代表一个HTTP cookie。 这是一个不可改变的对象,其中包含有关cookie的信息。因此,应用时,可以访问cookie的各个属性,从中获取到相应的数据,也可以在cookie中带上某些数据传递出去。
NSHTTPCookie通过一个包含cookie的属性的字典来初始化。
有几个key是必须要设置的: NSHTTPCookiePath, NSHTTPCookieName, NSHTTPCookieValue,还有就是NSHTTPCookieOriginURL 和 NSHTTPCookieDomain一定要选一个.
附:详解NSHTTPCookie=>https://www.cnblogs.com/worldtraveler/p/4739785.html
- NSHTTPCookieStorage
一个单例,用来管理存储的cookies。
使用时,要设置接收策略, 可以在applicationDidBecomeActive方法中做
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
设置cookie的接收策略,有三种模式:
NSHTTPCookieAcceptPolicyAlways(默认),
NSHTTPCookieAcceptPolicyNever,
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain.
应用一:附带cookie访问网页
1、准备字典
// 访问页面的地址
NSURL *url = [NSURL URLWithString:@"http://... ..."];
// 字典
NSMutableDictionary *cookieDict = [[NSMutableDictionary alloc] initWithCapacity:0];
[cookieDict setObject:[url host] forKey:NSHTTPCookieDomain]; //域名
[cookieDict setObject:[url host] forKey:NSHTTPCookieOriginURL]; //url
[cookieDict setObject:[url path] forKey:NSHTTPCookiePath]; // 路径
[cookieDict setObject:@"0" forKey:NSHTTPCookieVersion]; // 版本
[cookieDict setObject:@"userid" forKey:NSHTTPCookieName]; //所需信息
[cookieDict setObject:@"123123" forKey:NSHTTPCookieValue]; //信息值
注:当需要传多个cookie信息时,要保证cookie的name不重复时,否则添加后会覆盖掉前面的。
2、初始化cookie对象
//通过字典初始化
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieDict];
// 添加cookie
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
3、加载网页
NSURLRequest *request=[NSURLRequest requestWithURL:url];
[self.webview loadRequest:request];
应用二:从cookie中获取信息
在网页加载完之后,可以拿到cookie
-(void)webViewDidFinishLoad:(UIWebView *)webView{
NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location"];
NSLog(@"currentURL == %@",currentURL);
NSArray *nCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
NSHTTPCookie *cookie;
for (id c in nCookies){
if ([c isKindOfClass:[NSHTTPCookie class]]){
cookie=(NSHTTPCookie *)c;
NSDictionary * dic= cookie.properties;
NSLog(@"---%@: %@", cookie.name, cookie.value);
}
}
NSDictionary * dic=[NSHTTPCookie requestHeaderFieldsWithCookies:nCookies];
}
网友评论