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.