2014-11-24 196 views
4

我使用NSURLSession dataTaskWithRequest:completionHandler:向我的服务器发出一些请求。我正在使用自签名证书,所以当代理人URLSession:didReceiveChallenge:completionHandler:被调用时,我可以执行内部检查以确认一切正常。NSURLSession didReceiveChallenge只调用一次

这对我发送的第一个请求非常有效。在我致电完成处理程序NSURLSessionAuthChallengeUseCredential后,然后下一个请求永远不会调用URLSession:didReceiveChallenge:completionHandler:

由于我在这篇文章中不会涉及的原因,我很想每次都调用URLSession:didReceiveChallenge:completionHandler:,这样我就可以自己进行检查。我假设NSURLSession以某种方式缓存证书并将其保存在某种“有效证书”列表中,因此每次都不会执行此检查。我想清除这个缓存,以便我可以每次都进行自己的检查。如果我重新启动应用程序,那么URLSession:didReceiveChallenge:completionHandler:确实会再次被调用。

我试图凭证存储没有成功设置为nil:

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]; 

任何想法如何做到这一点?

谢谢!

+0

请参阅: http://stackoverflow.com/questions/27065372/why-is-a-https-nsurlsession-connection-only-challenged-once-per-domain – 2015-01-08 12:58:05

+0

非常感谢您的指点我这个!我已经放弃了希望! – Rob 2015-01-09 17:07:57

+0

@Rob你有这个问题吗? – Ramis 2015-10-29 09:13:19

回答

0

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