Очистить учетные данные из UIWebView

То, что я делаю здесь, это получение URL с аутентификацией. Следовательно, я использую функцию

  - (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;

Когда он сталкивается с аутентификацией, я представляю UIAlertView для ввода имени пользователя и пароля, и, если пользователь ввел его правильно, вызывается этот метод.

  - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;

в этом методе я делаю окно входа в систему исчезают и вводят в подробном представлении.

Проблема возникла, когда я хотел выйти из системы. Все, что я хочу, - это удалить учетные данные, введенные пользователем, и снова получить этот URL для аутентификации = цель. Итак, я вызываю didReceiveAuthenticationChallenge.

Но происходит то, что он напрямую переходит к методу didReceiveResponse, ничего не спрашивая. Проблема в том, что я не могу очистить учетные данные. Можете ли вы помочь мне в этом?

Заранее большое спасибо!

3 ответа

Решение

Попробуйте код для очистки cookie запроса

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
    NSString* domainName = [cookie domain];
    NSRange domainRange = [domainName rangeOfString:@"twitter"];
    if(domainRange.length > 0)
    {
        [storage deleteCookie:cookie];
    }
}

Отличный вопрос, и в моем случае я не мог понять, почему мы не можем выйти из веб-просмотра.

Я использовал некоторый код из первого ответа, но хотел удалить все куки в целом, а не только те, которые связаны с определенной строкой или URL. Вот что я сделал:

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookie in [cookieJar cookies]) {
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}

И это сработало! Теперь, когда вы выходите из системы, он каждый раз возвращается к исходному экрану входа.

Я знаю, что это старый вопрос, но у меня есть ответ здесь:

Оказывается, что куки не единственный способ, которым UIWebView хранит данные. Есть также эта постоянная вещь, называемая NSURLCredentialStorage, и единственный способ очистить ее так:

NSLog(@"Logging out...");

// Clear credential storage
NSURLCredentialStorage *credentialStorage = [NSURLCredentialStorage sharedCredentialStorage];
NSDictionary *credentialProtectionSpaces = [credentialStorage allCredentials];

for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces)
{
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace];
    for (NSString * username in credentials)
    {
        [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace];
        NSLog(@"clearing: %@", username);
    }
}

NSLog(@"checking...");

credentialStorage = [NSURLCredentialStorage sharedCredentialStorage];
credentialProtectionSpaces = [credentialStorage allCredentials];
for (NSURLProtectionSpace *protectionSpace in credentialProtectionSpaces)
{
    NSDictionary *credentials = [credentialStorage credentialsForProtectionSpace:protectionSpace];
    for (NSString * username in credentials)
    {
        [credentialStorage removeCredential:[credentials objectForKey:username] forProtectionSpace:protectionSpace];
        NSLog(@"checking: %@", username);
    }
}

Вы обнаружите, что имена пользователей показываются в первый раз, но не показываются при проверке во второй раз через тот же цикл. Они были удалены из NSURLProtectionSpaces.

-Sean

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