cookie是什么东西?
Cookie/Session机制详解这位博主写的很详细,可以看一下。
iOS 应用中可以在http连接中方便的使用cookie。url加载框架帮我们做了大量的工作以利用协议的这个特征。
经常用到cookie的地方有3个:检索cookie的值、显示删除cookie、手工将cookie加到请求中。
url加载系统会自动处理所有http/s请求的cookie,会将返回的cookie保存在响应中,然后按照cookie处理规则将其添加到随后的请求中。
url加载系统提供了两个重要的对象以管理cookie:NSHttpCookie与NSHttpCookieStorage。
NSHttpCookie是通过属性来表示cookie,NSHttpCookieStorage是单例对象,用来管理应用的cookie。ios 的沙盒模式,cookie应用中不能共享。
typedef NS_ENUM(NSUInteger, NSHTTPCookieAcceptPolicy) {
NSHTTPCookieAcceptPolicyAlways, //默认值保存所有返回cookie
NSHTTPCookieAcceptPolicyNever,//不保存cookie
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain//只保存与请求域相匹配的cookie
};
实例:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
代码还可以对每个请求停止使用自动化cookie处理,这是通过调用
[request setHTTPShouldHandleCookies:NO];//request为NSMutableURLRequest对象
这样可以组织URL加载系统处理返回的请求。
1、从响应中获取cookie
从响应中获取cookie 然后根据名字查找特定的cookie是神常见的事。
NSURL *url = [NSURL URLWithString:@"http://sale.jd.com/act/yRkab6FWMOlUV.html?cpdad=1DLSUE"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSHTTPURLResponse *response ;
NSError *error;
if (error) {
NSLog(@"出现错误");
}
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSDictionary *headers = [response allHeaderFields];//获取响应头所有的键值
NSLog(@"headers = %@",headers);
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:headers forURL:url];
NSLog(@"cookieArray = %@",cookies);
for (NSHTTPCookie *cookie in cookies) {
if ([[cookie name] isEqualToString:@"1"]) {
}
}
2 删除cookie
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
//获取保存的cookie
NSArray *cookiesArray = [cookieStorage cookies];
//获取指定url 的cookie
NSArray *urlCookies = [cookieStorage cookiesForURL:url];
for (NSHTTPCookie * cookie in cookiesArray) {
[cookieStorage deleteCookie:cookie];
}
3创建cookie
//cookie的键值
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
@"Foo",NSHTTPCookieName,
@"this is foo",NSHTTPCookieValue,
@"/",NSHTTPCookiePath,
url,NSHTTPCookieOriginURL, nil];
//用字典初始化cookie
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dic];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//将cookie放入数组中
NSArray *newCookie = [NSArray arrayWithObject:cookie];
NSLog(@"old headler = %@",[request allHTTPHeaderFields]);
//将cookie数组转化为字典
NSDictionary *newHeaders = [NSHTTPCookie requestHeaderFieldsWithCookies:newCookie];
//替换request头
[request setAllHTTPHeaderFields:newHeaders];
NSLog(@"new headler = %@",[request allHTTPHeaderFields]);
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
到此结束。。。。
文章内容摘自《ios网络高级编程》