Jak usunąć wszystkie pliki cookie z UIWebView?

91

W mojej aplikacji mam UIWebviewładującą stronę uwierzytelniania linkin do logowania. Kiedy użytkownik się loguje, pliki cookie zapisują się w aplikacji.

Moja aplikacja ma przycisk wylogowania, który nie jest powiązany z logowaniem na linkedin. Kiedy więc użytkownik kliknie ten przycisk, wylogowuje się z aplikacji. Chcę, aby to wylogowanie wyczyściło jego pliki cookie linkedin również z aplikacji, tak aby użytkownik wylogował się całkowicie.

Vaibhav Saran
źródło

Odpowiedzi:

209

Zgodnie z tym pytaniem możesz przejrzeć każdy plik cookie w „Cookie Jar” i usunąć go, na przykład:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
źródło
@Felipe Znalazłem tymczasowy sposób, musisz usunąć pliki cookie podczas ładowania aplikacji, jeśli wylogujesz się ostatnim razem.
Ishu
@Ishu cóż, tak, to jest dokładnie to, co teraz robię, ale tak naprawdę nie odpowiada na pytanie, jak NAPRAWDĘ usunąć pliki cookie na zawsze, a nie tylko dla bieżącej sesji
Felipe Brahm
Trwale usuwa pliki cookie. Wszelkie żądania wysłane później mogą spowodować ponowne utworzenie plików cookie. Ponadto, jeśli chcesz usuwać pliki cookie tylko w sytuacjach, w których użytkownik się wylogowuje, zalecałbym usunięcie tylko plików cookie sesji, ponieważ wylogowanie jest tak naprawdę tylko zakończeniem sesji. W przeciwnym razie utracisz potencjalne ustawienia, które użytkownik chce zachować między sesjami.
dsingleton
19
Pamiętaj, aby wywołać [[NSUserDefaults standardUserDefaults] synchronize], aby upewnić się, że zmiany zostały zapisane na dysku. @felipe dlatego widzisz, że pliki cookie wracają przy kolejnych uruchomieniach.
Yetanotherjosh
Próbowałem tego, ale licznik zwrotu pamięci 0, testuję to na symulatorze iOS 8, więc jak mogę to zrobić, aby usunąć pliki cookie z Facebooka na safari.
Nada Gamal
8

Chciałem tylko dodać trochę informacji na ten temat.

W OS X 10.9 / iOS 7 i nowszych możesz użyć -resetWithCompletionHandler: aby wyczyścić pliki cookie, pamięć podręczną itp. Z całej aplikacji z sharedSession:

Opróżnia wszystkie pliki cookie, pamięci podręczne i magazyny poświadczeń, usuwa pliki dyskowe, opróżnia trwające pobieranie na dysk i zapewnia, że ​​przyszłe żądania pojawią się w nowym gnieździe.

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

Za-In pętli przy deleteCookie:dźwiękach takich modyfikacji podczas wyliczania kolekcję do mnie. (Nie wiem, czy może to być zły pomysł?)

Cai
źródło
Użyłem obu metod, które zostały pomyślnie uruchomione, ale nadal stwierdzam, że Google nadal pokazuje historię wyszukiwania po tym wszystkim (niezalogowany). Jakieś pomysły? Dzięki
mylogon
Czy wpłynie to na stan Alamofire i zużycie moich interfejsów API REST zaplecza? Czy Alamofire nie opiera swojego rozwiązania na URLSession?
Sajjon
1

Możesz stworzyć funkcję w kodzie HTML WebView, która czyści pliki cookie.

Jeśli chcesz, aby czyszczenie zostało wykonane tylko raz, możesz uruchomić tę funkcję zdarzeniem Titanium, tylko podczas uruchamiania aplikacji.

Jack Kallis
źródło
1

Jeśli ktoś szuka szybkiego rozwiązania:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Saleh Enam Shohag
źródło