您的位置:首页 > 移动开发 > IOS开发

iOS 读书笔记-cookie

2015-08-05 10:17 225 查看
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网络高级编程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: