NSURLConnection
是善变的野兽,过去几天我一直遇到类似的问题。但是我找到了解决我的问题的方法,并提出了一些建议,说明可能是您遇到的问题的原因。
TLS
首先,发生在您身上的可能是缓存凭证的 TLS 层。这是因为建立 TLS 连接 [ 1 ] 的计算成本很高。
可能的解决方案是更改您正在使用的 DNS 名称,例如通过在字符串末尾添加一个点 (.),因为 DNS 协议接受以点结尾的字符串作为完全限定的 DNS 名称。我还看到人们向所有 URL 请求添加井号 (#),从而欺骗系统从不查找存储的凭据,而只是发起 didRecieveAuthenticationChallenge
调用 [ 2 ]。
饼干
另一种可能性是服务器正在设置您需要清除的 cookie。您可以通过执行以下操作来做到这一点:
-(void)clearCookies:(NSString *)urlString{
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedCookieStorage];
NSURL *url = [[NSURL alloc] initWithString urlString];
NSArray *cookies = [cookieStorage cookiesForURL:tempURL];
for(NSHTTPCookie *cookie in cookies){
//iterate over all cookies and delete them
[cookieStorage deleteCookie:cookie];
}
}
NSURLCredentialStorage
现在可能是凭据仍存储在 中sharedCredentialStorage
,因此应通过执行以下操作将其删除:
NSURLCredentialStorage *store = [NSURLCredentialStorage sharedCredentialStorage];
if(store !=nil){
for(NSURLProtectionSpace *protectionSpace in [store allCredentials]){
NSDictionary *map = [[NSURLCredentialStorage sharedCredentialStorage]
credentialsForProtectionSpace:protectionSpace];
if(map!=nil){
for(NSString *user in map){
NSURLCredential *cred = [map objectForKey:user];
[store removeCredential:cred forProtectionSpace:protectionSpace];
}
}
}
}
我希望这些会有所帮助。