Wie lösche ich alle Cookies von UIWebView?

91

In meiner Anwendung habe ich eine UIWebview, die die Linkedin-Authentifizierungsseite für die Anmeldung lädt. Wenn sich der Benutzer anmeldet, werden Cookies in der Anwendung gespeichert.

Meine App verfügt über eine Abmeldeschaltfläche, die nicht mit dem Linkedin-Login zusammenhängt. Wenn der Benutzer auf diese Schaltfläche klickt, meldet er sich von der App ab. Ich möchte, dass durch diese Abmeldung seine Linkedin-Cookies auch aus der App gelöscht werden, sodass sich der Benutzer vollständig abmeldet.

Vaibhav Saran
quelle

Antworten:

209

Entsprechend dieser Frage können Sie jedes Cookie im "Cookie Jar" durchgehen und wie folgt löschen:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
quelle
@Felipe Es wurde ein vorübergehender Weg gefunden, Cookies beim Laden der App zu löschen, wenn Sie sich das letzte Mal abmelden.
Ishu
@Ishu gut, ja, genau das mache ich jetzt, aber es beantwortet nicht wirklich die Frage, wie Cookies WIRKLICH für immer und nicht nur für die aktuelle Sitzung gelöscht werden können
Felipe Brahm
Cookies werden dauerhaft gelöscht. Nachträgliche Anfragen können dazu führen, dass die Cookies neu erstellt werden. Wenn Sie Cookies nur für Situationen löschen möchten, in denen sich ein Benutzer abmeldet, würde ich empfehlen, nur Sitzungscookies zu löschen, da das Abmelden eigentlich nur eine Beendigung der Sitzung ist. Andernfalls verlieren Sie potenzielle Einstellungen, die ein Benutzer über Sitzungen hinweg beibehalten möchte.
Dsingleton
19
Rufen Sie unbedingt [[NSUserDefaults standardUserDefaults] synchronize] auf, um sicherzustellen, dass die Änderungen auf der Festplatte gespeichert werden. @felipe Aus diesem Grund werden die Cookies bei nachfolgenden Läufen zurückgegeben.
Yetanotherjosh
Ich habe es versucht, aber der Speicher gibt 0 zurück, ich teste es auf iOS 8 Simulator. Wie kann ich also Cookies von Facebook auf Safari löschen?
Nada Gamal
8

Ich wollte nur ein paar Infos dazu hinzufügen.

In OS X 10.9 / iOS 7 und höher können Sie -resetWithCompletionHandler: verwenden , um die Cookies und den Cache usw. der gesamten App aus Ihrem sharedSession:

Leert alle Cookies, Caches und Anmeldeinformationsspeicher, entfernt Datenträgerdateien, löscht laufende Downloads auf den Datenträger und stellt sicher, dass zukünftige Anforderungen auf einem neuen Socket auftreten.

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

Die For-In-Schleife mit deleteCookie:klingt wie Ändern, während eine Sammlung für mich aufgelistet wird . (Weiß nicht, könnte eine schlechte Idee sein?)

Cai
quelle
Ich habe beide Methoden verwendet, die erfolgreich ausgeführt wurden, aber ich stelle immer noch fest, dass Google nach all dem immer noch einen Suchverlauf anzeigt (nicht angemeldet). Irgendwelche Ideen? Danke
Mylonon
Beeinflusst dies den Status von Alamofire und den Verbrauch meiner Backend-REST-APIs? Basiert Alamofire seine Lösung nicht auf URLSession?
Sajjon
1

Sie können eine Funktion im HTML-Code von WebView erstellen, die die Cookies bereinigt.

Wenn die Reinigung nur einmal durchgeführt werden muss, können Sie diese Funktion mit einem Titanium-Ereignis nur dann auslösen, wenn die App gestartet wird.

Jack Kallis
quelle
1

Wenn jemand nach einer schnellen Lösung sucht:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Saleh Enam Shohag
quelle