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];
}
}
}
}
これらが役立つことを願っています。