Ios NSURLSession direceivechallenge仅调用一次

Ios NSURLSession direceivechallenge仅调用一次,ios,ssl-certificate,nsurlsession,Ios,Ssl Certificate,Nsurlsession,我正在使用NSURLSessiondataTaskWithRequest:completionHandler:向我的服务器发出一些请求。我使用的是自签名证书,因此当调用委托的URLSession:didReceiveChallenge:completionHandler:时,我可以进行内部检查以验证一切正常 这一切在我发送的第一个请求上都非常有效。在我使用NSURLSessionAuthChallengeUseCredential调用完成处理程序之后,下一个请求再也不会调用URLSession:

我正在使用NSURLSession
dataTaskWithRequest:completionHandler:
向我的服务器发出一些请求。我使用的是自签名证书,因此当调用委托的
URLSession:didReceiveChallenge:completionHandler:
时,我可以进行内部检查以验证一切正常

这一切在我发送的第一个请求上都非常有效。在我使用
NSURLSessionAuthChallengeUseCredential
调用完成处理程序之后,下一个请求再也不会调用
URLSession:didReceiveChallenge:completionHandler:

出于我在本文中不想讨论的原因,我真的希望每次调用
URLSession:didReceiveChallenge:completionHandler:
,这样我就可以自己检查了。我假设NSURLSession以某种方式缓存证书,并将其保存在某种“有效证书”列表中,因此它不会每次都执行此检查。我想清除此缓存,以便每次都可以进行自己的检查。如果重新启动应用程序,则会再次调用
URLSession:didReceiveChallenge:completionHandler:

我已尝试将凭据存储设置为零,但未成功:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.URLCredentialStorage = nil;
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
[[session dataTaskWithRequest:request
            completionHandler:^(NSData *data,
                                NSURLResponse *response,
                                NSError *error) {

                ...

            }] resume];
有没有办法做到这一点


谢谢大家!

对于在这里尝试一切的人来说,后端可能会出现问题。因此,通过在nginx服务器中禁用ssl会话缓存解决了此问题。

请参阅:非常感谢您向我指出此问题!我已经放弃了希望@“罗布,你有这个问题吗?”拉米斯,我用沃尔克的答案解决了这个问题。