iOS 读书笔记-cookie

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值