didReceiveAuthenticationChallenge вызывается только один раз iPhone

Я подключаюсь к серверу используя NSURLConnection, Сервер запрашивает базовую аутентификацию, для которой я использую методы делегата:didReceiveAuthenticationChallenge, Но это называется только один раз. Если я изменю пароль на другое значение, то это delegate методы не вызываются, и мой вход в систему считается успешным?

Любая помощь будет оценена.

Благодарю.

4 ответа

Решено!

Оказывается, что NSURLConnection на самом деле вел себя правильно - то есть didReceiveAuthenticationChallenge: вызывался для каждой проверки подлинности.

Проблема заключалась в том, что сервер не отправлял вызовы после первого. Это произошло потому, что сервер устанавливал cookie.

Вы можете вызвать новый вызов, просто удалив cookie. Поскольку для этого сервера нет других полезных файлов cookie, я просто удаляю их все:

- (void)clearCookiesForURL {
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray *cookies = [cookieStorage cookiesForURL:_URL];
    for (NSHTTPCookie *cookie in cookies) {
        NSLog(@"Deleting cookie for domain: %@", [cookie domain]);
        [cookieStorage deleteCookie:cookie];
    }
}

Вы должны сделать следующие шаги, чтобы закрыть сессию полностью.

  1. Удалить все куки
  2. Удалить все учетные данные
  3. NSURLCredentialPersistence должно быть NSURLCredentialPersistenceNone

К сожалению, в настоящее время нет простого способа сделать то, что вы просили:

Информативное объяснение Apple: TLS Session Cache

Запрос об ошибке Open Radar: нет способа очистить кэш TLS с NSURLConnection

NSURLConnection будет кэшировать учетные данные. Вот подход, чтобы найти и стереть определенные учетные данные (таким образом, вам снова бросают вызов):

Можно ли предотвратить NSURLRequest от кэширования данных или удалить кэшированные данные после запроса?

Надеюсь, что это работает для вас, Стив

Другие вопросы по тегам