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