Очистить учетные данные из UIWebView - PullRequest
5 голосов
/ 31 августа 2011

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

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

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

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 01 сентября 2011

Попробуйте код для очистки 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];
    }
}
3 голосов
/ 21 февраля 2014

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

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

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];

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

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

3 голосов
/ 09 августа 2013

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

Оказывается, файлы 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

...