ios AFNetworking---cookie(session)保持登陸會話狀態


AFNetworking是最令人喜歡的ios網絡庫,它構建於在NSURLConnection, NSOperation等Foundation技術之上,奉承的話不多說了,今天記錄一下關於使用它又遇到的一個小問題。

----------------------------------------我是分割線-------------------------------------

平時公司的項目是利用登陸后獲取到一個token(令牌),當再次請求該用戶的其他信息時,在post請求的body,添加token參數即可。

[self.manager POST:接口 parameters:@{@"參數名"123,@“token”:} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
}failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@",[error description]);
    }];

但是后台服務器是利用web的cookie保持登陸會話狀態,所謂cookie是為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據。

所以AFNetworking中並沒有專門為cookie封裝的代碼,不過底層使用的是NSURLRequest,所以我們可以獲取到請求時服務器返回的cookie

NSString*urlStr=[NSString stringWithFormat:@"你的接口?username=%@&password=%@",account,password];
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL: [NSURL URLWithString:urlStr]];//得到cookie
NSString*JSESSIONID=@"";
        for (NSHTTPCookie*cookie in cookies) {
            if ([cookie.name isEqualToString:@"JSESSIONID"]) {
                JSESSIONID=cookie.value;
            }
        }
//ps :我們也可以得到cookie里面的session和其他信息
//將得到的cookie保存一下
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:cookies];
        [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"cookie"];
        [[NSUserDefaults standardUserDefaults] synchronize];

好了,通過以上方法,我們得到了cookie和session。

重點來了,當再次請求時,我們可以設置一下cookie:

NSString *cookieStr = [NSString stringWithFormat:@"JSESSIONID=%@",JSESSIONID];//可以設置一下session,也可以添加其他的信息
[self.manager.requestSerializer setValue:cookieStr forHTTPHeaderField:@"Cookie"];//設置到headerField

可以打印一下:

NSLog(@"%@",self.manager.requestSerializer.HTTPRequestHeaders);

----------------------------------------------------我是分割線------------------------------------------

剛才說了那么多,其實說的都是廢話,因為AFNetworking是自動保持cookie的,我們不用去刻意處理它(獲取與上傳),除非你有一些需要

當然您也可以設置不用保持cookie

[self.manager.requestSerializer setHTTPShouldHandleCookies:YES];//默認是yes

如果你的項目后台是用cookie保持登陸會話狀態,具體因項目而異,登陸完成后,不用做任何處理,直接post請求,afnetworking自動保持cookie,不用自己去上傳cookie(session)。

當然你也可以刪除cookie

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];  
    NSArray *cookies = [NSArray arrayWithArray:[cookieJar cookies]];  
    for (NSHTTPCookie *cookie in cookies) {  
        if ([[cookie name] isEqualToString:key]) {  
            [cookieJar deleteCookie:cookie];  
        }  
    }  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM