iOS AFNetworking进行网络请求时带上登陆成功后台返回的cookie

本文介绍了一种在iOS应用中实现自动登录的方法,并详细解释了如何使用NSHTTPCookieStorage来存储和读取cookie,以及如何利用AFNetworking进行带有cookie的网络请求。
第一步,在登陆成功后存储cookie到本地
 登陆的接口,无需带用户名和密码

 NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURLURLWithString:@"请求地址] ];

        NSData *UserData = [NSKeyedArchiver archivedDataWithRootObject:cookies] ;

        [[NSUserDefaults standardUserDefaults] setObject:UserData forKey:@"kUserDefaultsCookie"] ;


第二步,在需要自动登陆时获取cookie值,ios的网络请求函数会请这个cookie值自动加入请求url

 NSData *cookieData = [[NSUserDefaults standardUserDefaults] objectForKey:@"kUserDefaultsCookie"] ;

    if ([cookieData length]) {

        NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookieData] ;

        NSHTTPCookie *cookie ;

        for (cookie in cookies) {

            [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie] ;

        }

 

    }


 AFNetworking进行网络请求时带上登陆成功后台返回的cookie

    AFHTTPRequestOperationManager *manager = [ AFHTTPRequestOperationManager manager ];
    manager.
requestSerializer . HTTPShouldHandleCookies = YES ;
    manager.
responseSerializer   = [ AFJSONResponseSerializer serializer ];
    [manager.
requestSerializer setValue : [[ NSUserDefaults standardUserDefaults ] objectForKey : @"cooKie" ] forHTTPHeaderField : @"Cookie" ];
    manager.
responseSerializer . acceptableContentTypes = [ NSSet setWithObjects : @"text/html" , @"application/json" , nil ];
   
    
NSLog ( @"=====++++++%@" , [[ NSUserDefaults standardUserDefaults ] objectForKey : @"cooKie" ]);
   
   
   
NSDictionary * dataDic = [ Sign getData :parameter];
   
   
NSMutableDictionary *dic = [ NSMutableDictionary dictionaryWithDictionary :dataDic];
   
   
NSString * signString = [ Sign getSign :parameter];
    [dic
setValue :signString forKeyPath : @"sign" ];
    [dic
setValue : @"ios" forKeyPath : @"partner" ];

   
NSString *urlString = [ NSString stringWithFormat : RequestTheAddress , url];

    [manager
POST :[urlString stringByAddingPercentEncodingWithAllowedCharacters :[ NSCharacterSet URLQueryAllowedCharacterSet ]] parameters :dic success :^( AFHTTPRequestOperation *operation, id responseObject) {
       
       
NSDictionary *fields= [operation. response allHeaderFields ];
       
NSArray *cookies=[ NSHTTPCookie cookiesWithResponseHeaderFields :fields forURL :[ NSURL URLWithString :[urlString stringByAddingPercentEncodingWithAllowedCharacters :[ NSCharacterSet URLQueryAllowedCharacterSet ]]]];
       
       
NSDictionary * requestFields=[ NSHTTPCookie requestHeaderFieldsWithCookies :cookies];
       
       
NSLog ( @"%@" , requestFields);
       
       
if ([url isEqualToString : @"m=api&c=user&a=login" ]) {
           
if (requestFields. allKeys . count != 0 ) {
                [[
NSUserDefaults standardUserDefaults ] setObject :[requestFields objectForKey : @"Cookie" ] forKey : @"cooKie" ];
            }
        }
       
       
NSLog ( @"=====%@" , [[ NSUserDefaults standardUserDefaults ] objectForKey : @"cooKie" ]);
       
        network(responseObject);
    }
failure :^( AFHTTPRequestOperation *operation, NSError *error) {
       
NSLog ( @"error = %@" , operation. responseString );
       
    }];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值