Невозможно повторно аутентифицироваться с другими NSURLCredentials (используются старые удаленные)

Я искал 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-адресу, чтобы принудительно выполнить повторную аутентификацию, что работает, но просто не решает проблему, потому что мне нужно рассчитывать на учетные данные сеанса и возможность использовать совершенно разные учетные данные.

Это ошибка или известная проблема, и как мне ее решить ... Скажем прямо: что я здесь делаю не так?

Это действительно меня беспокоит и мешает Работа.

Буду очень признателен за любой вклад!

Большое спасибо!

16
задан Mike F 21 December 2015 в 13:11
поделиться