Bagaimana cara menghapus semua cookie UIWebView?

91

Dalam aplikasi saya, saya memiliki UIWebviewhalaman autentikasi linkedin untuk login. Saat pengguna masuk, cookie disimpan ke dalam aplikasi.

Aplikasi saya memiliki tombol logout yang tidak terkait dengan login linkedin. Jadi ketika pengguna mengklik tombol ini, dia logout dari aplikasi. Saya ingin log off ini akan menghapus cookie tertautnya juga dari aplikasi, sehingga pengguna akan keluar sepenuhnya.

Vaibhav Saran
sumber

Jawaban:

209

Berdasarkan pertanyaan ini , Anda dapat memeriksa setiap cookie di "Cookie Jar" dan menghapusnya, seperti:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
sumber
@Felipe Menemukan cara sementara, perlu menghapus cookie di aplikasi memuat jika Anda logout terakhir kali.
Ishu
@Ishu baiklah, ya, itulah yang saya lakukan sekarang, tetapi itu tidak benar-benar menjawab pertanyaan tentang bagaimana BENAR-BENAR menghapus cookie selamanya dan tidak hanya untuk sesi saat ini
Felipe Brahm
Ini menghapus cookie secara permanen. Permintaan apa pun yang dibuat setelahnya dapat mengakibatkan cookie dibuat ulang. Selain itu, jika Anda ingin menghapus cookie hanya untuk situasi di mana pengguna keluar, maka saya akan merekomendasikan hanya menghapus cookie sesi, karena keluar hanyalah penghentian sesi. Jika tidak, Anda kehilangan pengaturan potensial yang ingin dipertahankan pengguna di seluruh sesi.
dsingleton
19
Pastikan untuk memanggil [[NSUserDefaults standardUserDefaults] sinkronisasi] untuk memastikan perubahan disimpan ke disk. @felipe inilah mengapa Anda melihat cookie kembali pada proses berikutnya.
Yetanotherjosh
Saya mencoba ini tetapi penyimpanan mengembalikan 0 hitungan, saya mengujinya di iOS 8. Jadi bagaimana saya bisa menghapus cookie facebook di safari.
Nada Gamal
8

Hanya ingin menambahkan beberapa info tentang ini.

Di OS X 10.9 / iOS 7 dan yang lebih baru, Anda dapat menggunakan -resetWithCompletionHandler: untuk menghapus cookie dan cache, dll. Dari seluruh aplikasi dari sharedSession:

Mengosongkan semua cookie, cache, dan penyimpanan kredensial, menghapus file disk, menghapus unduhan yang sedang berlangsung ke disk, dan memastikan bahwa permintaan di masa mendatang terjadi pada soket baru.

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

The untuk-Dalam loop dengan deleteCookie:suara seperti memodifikasi sementara pencacahan koleksi saya. (Tidak tahu, mungkinkah ide yang buruk?)

Cai
sumber
Saya telah menggunakan kedua metode yang berhasil dijalankan, tetapi saya masih menemukan bahwa google masih menampilkan riwayat pencarian setelah semua ini (tidak masuk). Ada ide? Terima kasih
mylogon
Apakah ini akan memengaruhi keadaan Alamofire dan konsumsi saya atas REST API Backend saya? Bukankah Alamofire mendasarkan solusinya pada URLSession?
Sajjon
1

Anda bisa membuat fungsi di dalam html WebView, yang membersihkan cookie.

Jika Anda ingin pembersihan dilakukan hanya sekali, Anda dapat memicu fungsi ini dengan peristiwa Titanium, hanya saat aplikasi dimulai.

jack kallis
sumber
1

Jika ada yang mencari Solusi Swift:

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