NSURLConnection
是變態的野獸,過去幾天我也遇到類似的問題。但是我已經找到了解決我的問題的方法,並提出了一些建議,以解決您可能遇到的問題的原因。
TLS
首先有可能是發生了什麼,你是TLS層緩存的憑據。這是由於建立TLS連接在計算上是昂貴的[1]。
可能的解決方法是更改所使用的DNS名稱,例如在字符串末尾添加一個點(。),因爲DNS協議接受以點爲結尾的字符串作爲完全限定的DNS名稱。我還看到有人向所有URL請求添加hashtag(#),因此欺騙系統從不查找存儲的憑證,而只是啓動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];
}
}
}
}
我希望這些會有所幫助。