Ios NSURLConnection Post请求失败,在不同会话中登录和注销时,应用程序启动之间出现1012个错误代码

Ios NSURLConnection Post请求失败,在不同会话中登录和注销时,应用程序启动之间出现1012个错误代码,ios,http-post,nsurlconnection,Ios,Http Post,Nsurlconnection,一旦用户登录到服务器,我就发送HTTP post请求和NSURLConnection同步请求。cookie用于身份验证,我没有将任何cookie设置为标头 案例1:我第一次启动应用程序并登录时收到成功响应 案例2:稍后,当我以已登录状态退出应用程序,然后重新启动应用程序,注销并再次登录时,我收到-1012错误 案例3:在我登录的同一会话中注销时,没有发生错误。例如,如果我在应用程序启动时登录并注销,然后退出应用程序,再次重新启动并登录,我会收到成功响应 请帮我处理第二个案子 我的职位要求如下:

一旦用户登录到服务器,我就发送HTTP post请求和NSURLConnection同步请求。cookie用于身份验证,我没有将任何cookie设置为标头

案例1:我第一次启动应用程序并登录时收到成功响应

案例2:稍后,当我以已登录状态退出应用程序,然后重新启动应用程序,注销并再次登录时,我收到-1012错误

案例3:在我登录的同一会话中注销时,没有发生错误。例如,如果我在应用程序启动时登录并注销,然后退出应用程序,再次重新启动并登录,我会收到成功响应

请帮我处理第二个案子

我的职位要求如下:

// perform eHTTPPost request with header

- (NSData *)doPostRequest:(NSURL *)serverURL
                 data:(NSData *)postData
    headerContentType:(NSString *)contentType
{
   NSData *returnData;
   _connectionException = nil;
   NSString *postLength = [NSString stringWithFormat:@"%lu",(unsigned long)    [postData length]];

   HTTPClient *client = [[HTTPClient alloc] initWithRequestType:eHTTPPOST
                                             withServerURL:[serverURL absoluteString]
                                                   andPath:nil
                                            andQueryString:nil
                                                   andData:postData];


  [client setRequestDataContentType: contentType];
  [client setRequestDataContentLength:postLength];
  [client setShouldZipEncode:NO];
  if([client sendRequest]){
     returnData = [client responseData];
     NSError *parseError = nil;
     NSString *responseDataString = [NSString stringWithUTF8String:[returnData bytes]];
    NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:returnData
                                                             options:NSJSONReadingAllowFragments
                                                               error:&parseError];
   NSLog(@"Set attributes Response Dict: %@",responseDict);
  }else{
//Handle error
    _connectionException = [client responseException];
    NSLog(@"HTTP error : %@", [client responseException].reason);
  }
  return returnData;
}

这些cookie要么即将过期,要么无法在发布期间持久化。尽管您可以尝试修复cookie持久性问题,但依赖auth cookie仍然存在并不是处理身份验证的理想方式

相反,您的应用程序应该将用户的凭据存储在密钥链中,并在启动时登录以检索身份验证cookie,如果登录失败或密钥链中不存在凭据,则要求用户提供凭据

如果您这样做,那么您就可以轻松地处理上述情况,只要在使用-1012(HTTP 401)的请求失败时使用存储的凭据再次登录即可,如果失败,请向用户请求新凭据