【问题标题】:NSURLSession didReceiveChallenge only called onceNSURLSession didReceiveChallenge 只调用了一次
【发布时间】:2015-10-30 15:24:52
【问题描述】:

我正在使用 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];

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

谢谢!

【问题讨论】:

  • 非常感谢您向我指出这一点!我已经放弃了希望!
  • @Rob 你有这个问题吗?
  • @Ramis,我不再用 Volker 的答案解决了这个问题。

标签: ios ssl-certificate nsurlsession


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多