码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 读书笔记-cookie

时间:2015-08-05 10:30:11      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:cookie   ios   

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网络高级编程》

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS 读书笔记-cookie

标签:cookie   ios   

原文地址:http://blog.csdn.net/u010123208/article/details/47291421

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!