Я искал 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-адресу, чтобы обеспечить повторную аутентификацию, которая работает, но просто не решает проблему, потому что мне нужно рассчитывать на учетные данные сеанса и возможность использовать совершенно разные учетные данные.
Является ли это ошибкой или известной проблемой, и как я могу это решить... Прямо: что я здесь делаю неправильно?
Это действительно раздражает меня и препятствует продолжению моей работы.
Я бы очень признателен за любой вклад!
Спасибо, много!