2011-08-31 17 views
5

Quello che sto facendo è recuperare un URL con autenticazione. Quindi, io uso la funzioneCancella le credenziali da UIWebView

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

Quando affronta autenticazione, presento un UIAlertView per immettere il nome utente e password e se l'utente ha immesso correttamente, questo metodo viene chiamato.

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

in questo metodo, faccio scomparire la finestra di login e portare in dettaglio la vista.

problema sorto, quando ho voluto una funzionalità disconnessione. Tutto quello che voglio è rimuovere le credenziali inserite dall'utente e recuperare di nuovo l'URL, per l'autenticazione = scopo. Quindi, chiamo il didReceiveAuthenticationChallenge.

Ma quello che succede va direttamente al metodo didReceiveResponse senza chiedere nulla. Il problema qui è che io sono non è in grado di cancellare le credenziali. Puoi aiutarmi a fare questo?

Grazie mille in anticipo!

+1

Mi sono imbattuto in questo stesso problema con una visualizzazione web. Grazie per aver chiesto questa domanda !! –

risposta

7

codice try per Clear biscotto di Richiesta

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]; 
    } 
} 
+0

Grazie! Completamente funzionato. Nel mio caso, però, non cercavo gli URL associati a una determinata stringa. Volevo far scattare tutti i cookie, quindi ho fatto la seconda riga seguita da un ciclo for semplice: rispondi con il codice qui sotto. –

+0

Vorrei poter raddoppiare il voto :) Grazie mille – Hamid

3

So che questa è una vecchia questione, ma ho la risposta qui:

Si scopre che i cookie non sono l'unico modo che UIWebView memorizza i dati. C'è anche questa cosa chiamata persistente NSURLCredentialStorage e l'unico modo per cancellare È così:

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); 
    } 
} 

You''ll scoprire che i nomi utente mostrano la prima volta, ma non mostrano quando si controlla la seconda volta attraverso lo stesso ciclo continuo. Sono stati eliminati da NSURLProtectionSpaces.

-Sean

+0

Come si farebbe in Swift? 'for protectionSpace: NSURLProtectionSpace in credentialProtectionSpaces {' dà l'errore "(NSURLProtectionSpace, [String: NSURLCredential]) '(noto anche come' (NSURLProtectionSpace, Dictionary ) ') non è convertibile in' NSURLProtectionSpace" – James

3

Grande questione, e nel mio caso non riuscivo a capire perché non siamo riusciti a uscire da una visione web.

Ho utilizzato un codice dalla prima risposta, ma volevo eliminare tutti i cookie nell'intero elemento piuttosto che solo quelli associati a una determinata stringa o URL. Ecco cosa ho fatto:

NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 

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

E questo ha funzionato! Ora, quando si effettua il logout, si ritorna alla schermata di accesso originale ogni volta.

+0

Esiste un modo per fare questo tramite Javascript?Ho una web app (Rails/devise/omniauth-facebook) e non posso rimuovere le credenziali da UIWebView. Ho chiesto questo con maggiori dettagli qui: http://stackoverflow.com/questions/37687130/clear-credentials-from-uiwebview-with-javascript – Horacio

Problemi correlati