Я искал stackoverflow, google, apple и другие места. Предоставленные советы выглядят многообещающе, я их реализовал, но в целом, похоже, они не работают и не применяются.
Проблема: у меня есть NSURLConnection
с определенными учетными данными.Затем я выхожу из системы, где я очищаю учетные данные, пространство защиты, удаляю все кешированные ответы и удаляю все файлы cookie в sharedHTTPCookieStorage
, но при повторном вызове аутентифицированного запроса через несколько секунд даже с неправильными учетными данными я все еще остаюсь с использованием старых (удаленных) учетных данных
Вот некоторые фрагменты кода, из которых удаляются учетные данные
NSDictionary *credentialsDict = [[NSURLCredentialStorage sharedCredentialStorage] allCredentials];
if ([credentialsDict count] > 0) {
// the credentialsDict has NSURLProtectionSpace objs as keys and dicts of userName => NSURLCredential
NSEnumerator *protectionSpaceEnumerator = [credentialsDict keyEnumerator];
id urlProtectionSpace;
// iterate over all NSURLProtectionSpaces
while (urlProtectionSpace = [protectionSpaceEnumerator nextObject]) {
NSEnumerator *userNameEnumerator = [[credentialsDict objectForKey:urlProtectionSpace] keyEnumerator];
id userName;
// iterate over all usernames for this protectionspace, which are the keys for the actual NSURLCredentials
while (userName = [userNameEnumerator nextObject]) {
NSURLCredential *cred = [[credentialsDict objectForKey:urlProtectionSpace] objectForKey:userName];
WriteLog(@"Method: switchView removing credential %@",[cred user]);
[[NSURLCredentialStorage sharedCredentialStorage] removeCredential:cred forProtectionSpace:urlProtectionSpace];
}
}
}
Затем я удаляю все кешированные ответы
NSURLCache *sharedCache = [NSURLCache sharedURLCache];
[sharedCache removeAllCachedResponses];
Затем удаляю все файлы cookie
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies = [cookieStorage cookies];
for (NSHTTPCookie *cookie in cookies) {
[cookieStorage deleteCookie:cookie];
NSLog(@"deleted cookie");
}
Я также пробовал не использовать файлы cookie и другие политики
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0];
[request setHTTPShouldHandleCookies:NO];
if(self.currentCookies != nil){
[request setAllHTTPHeaderFields:
[NSHTTPCookie requestHeaderFieldsWithCookies:nil]];
}
theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
Я также попробовал этот совет здесь, чтобы конкретно сохранить файлы cookie и передать их снова. http://www.hanspinckaers.com/multiple-nsurlrequests-with-different-cookies . В Интернете есть еще один блог, в котором предлагается добавить «#» к каждому URL-адресу, чтобы принудительно выполнить повторную аутентификацию, что работает, но просто не решает проблему, потому что мне нужно рассчитывать на учетные данные сеанса и возможность использовать совершенно разные учетные данные.
Это ошибка или известная проблема, и как мне ее решить ... Скажем прямо: что я здесь делаю не так?
Это действительно меня беспокоит и мешает Работа.
Буду очень признателен за любой вклад!
Большое спасибо!