Come eliminare tutti i cookie di UIWebView?


91

Nella mia applicazione, ho una UIWebviewche carica la pagina di autenticazione di LinkedIn per il login. Quando l'utente effettua l'accesso, i cookie vengono salvati nell'applicazione.

La mia app ha un pulsante di logout non correlato all'accesso a LinkedIn. Quindi, quando l'utente fa clic su questo pulsante, si disconnette dall'app. Voglio che questo log off cancelli i cookie di linkedin anche dall'app, in modo che l'utente si disconnetta completamente.

Risposte:


209

In base a questa domanda , puoi esaminare ogni cookie nel "Cookie Jar" ed eliminarli, in questo modo:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];

@Felipe Trovato un modo temporaneo, è necessario eliminare i cookie nel caricamento dell'app se ti sei disconnesso l'ultima volta.
— Ishu

@Ishu beh, sì, è esattamente quello che sto facendo ora, ma non risponde davvero alla domanda su come cancellare VERAMENTE i cookie per sempre e non solo per la sessione corrente
— Felipe Brahm

Elimina i cookie in modo permanente. Eventuali richieste successive potrebbero comportare la ricreazione dei cookie. Inoltre, se desideri eliminare i cookie solo per le situazioni in cui un utente si disconnette, ti consiglio di eliminare solo i cookie di sessione, poiché la disconnessione è in realtà solo una conclusione della sessione. In caso contrario, si perdono le potenziali impostazioni che un utente desidera mantenere nelle sessioni.
— Dsingleton

19
Assicurati di chiamare [[NSUserDefaults standardUserDefaults] sincronizza] per assicurarti che le modifiche vengano salvate su disco. @felipe questo è il motivo per cui stai vedendo i cookie tornare nelle esecuzioni successive.
— Yetanotherjosh

Ho provato questo ma lo storage restituisce il conteggio 0, lo provo su iOS 8 Simulator. Quindi come posso fare per eliminare i cookie di Facebook su Safari.
— Nada Gamal

8

Volevo solo aggiungere alcune informazioni su questo.

In OS X 10.9 / iOS 7 e versioni successive, puoi utilizzare -resetWithCompletionHandler: per cancellare i cookie e la cache, ecc. Dell'intera app dal tuo sharedSession:

Svuota tutti i cookie, le cache e gli archivi di credenziali, rimuove i file del disco, scarica i download in corso su disco e garantisce che le richieste future si verifichino su un nuovo socket.

[[NSURLSession sharedSession] resetWithCompletionHandler:^{
    // Do something once it's done.
}];

Il ciclo for-In con deleteCookie:suoni come la modifica durante l'enumerazione di una raccolta per me. (Non lo so, potrebbe essere una cattiva idea?)


Ho utilizzato entrambi i metodi che funzionano correttamente, ma sto ancora scoprendo che Google sta ancora mostrando una cronologia delle ricerche dopo tutto questo (non eseguito l'accesso). Qualche idea? Grazie
— miologon

Ciò influenzerà lo stato di Alamofire e il mio consumo delle mie API REST di backend? Alamofire non basa la sua soluzione su URLSession?
— Sajjon

1

Potresti creare una funzione all'interno dell'html del WebView, che pulisce i cookie.

Se è necessario che la pulizia venga eseguita una sola volta, è possibile attivare questa funzione con un evento Titanium, solo all'avvio dell'app.


1

Se qualcuno sta cercando una soluzione rapida:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.