Очистить учетные данные из 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