標籤:top nbsp success roo 轉換 request zip manager 資料
在APP開發中,cookie也開始變的越來越重要了。為了更好的切換,登出和登入賬戶,就必須熟悉cookie的用法。
花了點時間把代碼整理了一下,注釋也都標上了
1,擷取cookie
擷取cookie只能在請求中擷取cookie,否則時擷取不到的,url就不給出了,大家用自己的url測試一下就行。
擷取到cookie後把cookie進行歸檔儲存到userDefaults裡
| 123456789101112131415161718192021222324252627282930313233343536373839 |
#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(@"\n"); [self deleteCookie]; [self setCoookie]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { nil; }];} |
2,刪除cookie
把擷取到的cookie刪除掉,該步驟可以用在登出或者切換帳號裡。
當前,我這裡刪除cookie是為了檢測後面的通過本機存放區的資料進行設定cookie是否成功
| 12345678910111213141516171819 |
#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(@"\n");} |
3,通過本機存放區的資料設定cookie
把本地的cookie取出並反歸檔,設定到cookie中,並且檢測cookie是否設定成功
| 12345678910111213141516171819202122232425262728 |
#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(@"\n");} |
看一下運行
最後,奉上demo
CookieText
iOS cookie的用法