• iOS cookie的用法


    在APP开发中,cookie也开始变的越来越重要了。为了更好的切换,注销和登录账户,就必须熟悉cookie的用法。
    花了点时间把代码整理了一下,注释也都标上了

    1,获取cookie
    获取cookie只能在请求中获取cookie,否则时获取不到的,url就不给出了,大家用自己的url测试一下就行。
    获取到cookie后把cookie进行归档保存到userDefaults里

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #pragma mark 获取并保存cookie到userDefaults
    - (void)getAndSaveCookie
    {
        NSLog(@"=============获取cookie==============");
        NSString *urlString = @"";
     
        //请求一个网址,即可分配到cookie
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer = [AFJSONResponseSerializer new];
        [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
     
            //获取cookie
            NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
            for (NSHTTPCookie *tempCookie in cookies) {
                //打印获得的cookie
                NSLog(@"getCookie: %@", tempCookie);
            }
     
            /*
             * 把cookie进行归档并转换为NSData类型
             * 注意:cookie不能直接转换为NSData类型,否则会引起崩溃。
             * 所以先进行归档处理,再转换为Data
             */
            NSData *cookiesData = [NSKeyedArchiver archivedDataWithRootObject: [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]];
     
            //存储归档后的cookie
            NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
            [userDefaults setObject: cookiesData forKey: @"cookie"];
            NSLog(@" ");
     
            [self deleteCookie];
     
            [self setCoookie];
     
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     
            nil;
        }];
    }

    2,删除cookie
    把获取到的cookie删除掉,该步骤可以用在注销或者切换账号里。
    当前,我这里删除cookie是为了检测后面的通过本地存储的数据进行设置cookie是否成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #pragma mark 删除cookie
    - (void)deleteCookie
    {
        NSLog(@"============删除cookie===============");
        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
     
        //删除cookie
        for (NSHTTPCookie *tempCookie in cookies) {
            [cookieStorage deleteCookie:tempCookie];
        }
     
        //把cookie打印出来,检测是否已经删除
        NSArray *cookiesAfterDelete = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
        for (NSHTTPCookie *tempCookie in cookiesAfterDelete) {
            NSLog(@"cookieAfterDelete: %@", tempCookie);
        }
        NSLog(@" ");
    }

    3,通过本地存储的数据设置cookie
    把本地的cookie取出并反归档,设置到cookie中,并且检测cookie是否设置成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #pragma mark 再取出保存的cookie重新设置cookie
    - (void)setCoookie
    {
        NSLog(@"============再取出保存的cookie重新设置cookie===============");
        //取出保存的cookie
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
     
        //对取出的cookie进行反归档处理
        NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"cookie"]];
     
        if (cookies) {
            NSLog(@"有cookie");
            //设置cookie
            NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
            for (id cookie in cookies) {
                [cookieStorage setCookie:(NSHTTPCookie *)cookie];
            }
        }else{
            NSLog(@"无cookie");
        }
     
        //打印cookie,检测是否成功设置了cookie
        NSArray *cookiesA = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
        for (NSHTTPCookie *cookie in cookiesA) {
            NSLog(@"setCookie: %@", cookie);
        }
        NSLog(@" ");
    }

    看一下运行截图
    屏幕快照 2015-05-19 下午5.29.45

    最后,奉上demo
    CookieText

  • 相关阅读:
    【转载】ASP.NET Core读取appsettings.json配置文件信息
    node.js安装教程(简单易懂)
    记一次使用typescript模板初始化React项目的几个问题
    es分页查询 scroll
    Redis5设计与源码分析 (第15章 有序集合相关命令的实现)
    Redis5设计与源码分析 (第14章 集合相关命令的实现)
    Redis5设计与源码分析 (第13章 列表相关命令的实现)
    Redis5设计与源码分析 (第12章 散列表相关命令的实现)
    Redis5设计与源码分析 (第11章 字符串相关命令的实现)
    Redis5设计与源码分析 (第9章 命令处理生命周期)
  • 原文地址:https://www.cnblogs.com/yujidewu/p/7472736.html
Copyright © 2020-2023  润新知