NSURLCredentialPersistenceForSession を使用している NSURLConnection で NSURLCredential を設定したら、資格情報を設定解除する方法を探していましたが、有効な解決策が見つかりませんでした。NSURLCredentialStorage から NSURLCredential を削除すると、ストレージからのみ削除され、NSURLConnection キャッシュからは削除されません。キャッシュをオフにしてみましたが、まだ保持されています。大きなデータをアップロードしたくないので、NSURLCredentialPersistenceForSessionである必要があります一度。大きなデータを送信する前に、いくつかのプロパティをチェックして認証する方法がありますが、ログアウトしたり、認証を再要求したりすることはできません。WebDav クライアントを書いているのは、私の立場を理解していただくためです。資格情報を設定解除する必要があるのは、誰かが WebDav サーバーに複数のアカウントを持っていて、別のアカウントにログインしたい場合のためです。Cookie を調べて、そこに何かが設定されているかどうかを確認しようとしましたが、設定されていません。セッション専用であることはわかっています。つまり、アプリケーションを終了して再起動すると、他のユーザーとしてログインできます。しかし、それは一部の人々を混乱させるかもしれません。独自の認証システムを作成することを考えましたが、どれくらいの時間がかかるかわかりません。t。セッション専用であることはわかっています。つまり、アプリケーションを終了して再起動すると、他のユーザーとしてログインできます。しかし、それは一部の人々を混乱させるかもしれません。独自の認証システムを作成することを考えましたが、どれくらいの時間がかかるかわかりません。t。セッション専用であることはわかっています。つまり、アプリケーションを終了して再起動すると、他のユーザーとしてログインできます。しかし、それは一部の人々を混乱させるかもしれません。独自の認証システムを作成することを考えましたが、どれくらいの時間がかかるかわかりません。
上記のメッセージが長すぎる場合は申し訳ありませんが、誰かが有効な回答で私を助けようとすることができるように、すべてを詳細に説明していることを確認しています.
助けてくれてありがとう、
Gecko さん。
更新: コード例。
CFHTTPMessageRef message = [self httpMessageFromResponse:response];
authentication = CFHTTPAuthenticationCreateFromResponse(kCFAllocatorDefault, message);
CFHTTPMessageRef message = [self httpMessageFromRequest:request];
CFStreamError error;
CFHTTPMessageApplyCredentials(message, authentication, (CFStringRef)[credentials user], (CFStringRef)[credentials password], &error);
NSLog(@"%d", error.error); // Returns -1000
CFStringRef value = CFHTTPMessageCopyHeaderFieldValue(message, CFSTR("Authorization"));
NSLog(@"%@", (NSString *)value); // Returns NULL
if (value!=NULL)
CFRelease(value);
更新:資格情報を削除して試したコード。
- (void)resetCredentials {
NSURLCredentialStorage *store = [NSURLCredentialStorage sharedCredentialStorage];
NSDictionary *allCredentials = [store allCredentials];
NSArray *keys = [allCredentials allKeys];
for (int i=0; i<[keys count]; i++) {
NSURLProtectionSpace *protectionSpace = [keys objectAtIndex:i];
NSDictionary *userToCredentialMap = [store credentialsForProtectionSpace:protectionSpace];
NSArray *mapKeys = [userToCredentialMap allKeys];
for (int u=0; u<[mapKeys count]; u++) {
NSString *user = [mapKeys objectAtIndex:u];
NSURLCredential *credential = [userToCredentialMap objectForKey:user];
NSLog(@"%@", credential);
[store removeCredential:credential forProtectionSpace:protectionSpace];
}
}
}