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