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

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

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

平時公司的項目是利用登錄後獲取到一個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跟蹤而儲存在用戶本地終端上的數據。cookie

因此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。session

重點來了,當再次請求時,咱們能夠設置一下cookie:post

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

能夠打印一下:url

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

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

剛纔說了那麼多,其實說的都是廢話,由於AFNetworking是自動保持cookie的,咱們不用去刻意處理它(獲取與上傳),除非你有一些須要code

固然您也能夠設置不用保持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];  
        }  
    }  
}  
相關文章
相關標籤/搜索