我一直在試圖尋找一種方式,一旦你設定一個NSURLCredential與使用NSURLCredentialPersistenceForSession一個NSURLConnection的取消設置的憑據,但我無法找到一個可行的解決方案。從NSURLCredentialStorage中刪除NSURLCredential僅將其從存儲中刪除,而不是從NSURLConnection緩存中刪除。我試圖關閉緩存,它仍然保留它。我需要它是NSURLCredentialPersistenceForSession,因爲我不希望它是上傳大量的數據,然後又回到了你需要再驗證消息NSURLConnection的身份驗證,然後重新發送大量的數據,我只想進行一次身份驗證,併發送大數據一旦。在通過檢查某些屬性發送大量數據之前,我有一種驗證方式,但這不允許我註銷或重新請求驗證。我正在寫一個WebDAV客戶端,只是讓你明白我的立場,我需要取消證書的理由是,如果有人有WebDAV服務器上的多個帳戶,並希望登錄到另一個帳戶。我試圖查看餅乾,看看它是否設置了一些東西,但它沒有。我知道這隻適用於會話,這意味着一旦您退出並重新啓動應用程序,您可以作爲其他用戶登錄。但這可能會讓一些人感到困惑。我想過編寫自己的認證系統,但我不知道需要多長時間。NSURLCredential和NSURLConnection的
很抱歉,如果上述消息太長,我只是確保我詳細解釋一切,所以有人可以嘗試幫助我有效的答案,不是,去這裏帶領我的東西我試過了。
感謝您的幫助,
壁虎先生。
更新:實施例的代碼。
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];
}
}
}
我試過使用CFHTTPAuthenticationRef,但我不斷收到kCFStreamErrorHTTPAuthenticationTypeUnsupported這是一個奇怪的響應。我使用CFHTTPAuthenticationRef的想法是獲取生成的頭並將其應用於請求。以上代碼爲例。 – GRMrGecko 2011-01-31 17:52:10