Làm cách nào để xóa tất cả cookie của UIWebView?


91

Trong ứng dụng của tôi, tôi có một UIWebviewtrang xác thực được liên kết để đăng nhập. Khi người dùng đăng nhập, cookie sẽ lưu vào ứng dụng.

Ứng dụng của tôi có nút đăng xuất không liên quan đến đăng nhập linkedin. Vì vậy, khi người dùng nhấp vào nút này, anh ta sẽ đăng xuất khỏi ứng dụng. Tôi muốn rằng lần đăng xuất này cũng sẽ xóa cookie liên kết của anh ấy khỏi ứng dụng, do đó người dùng sẽ đăng xuất hoàn toàn.

Câu trả lời:


209

Theo câu hỏi này , bạn có thể xem qua từng cookie trong "Cookie Jar" và xóa chúng, như sau:

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

@Felipe Tìm thấy một cách tạm thời, cần xóa cookie khi tải ứng dụng nếu bạn đăng xuất lần trước.
Ishu

@Ishu à, vâng, đó chính xác là những gì tôi đang làm bây giờ, nhưng nó không thực sự trả lời câu hỏi về cách THỰC SỰ xóa cookie mãi mãi và không chỉ cho phiên hiện tại
Felipe Brahm

Nó xóa cookie vĩnh viễn. Bất kỳ yêu cầu nào được thực hiện sau đó đều có thể dẫn đến việc tạo lại cookie. Ngoài ra, nếu bạn chỉ muốn xóa cookie trong các trường hợp người dùng đang đăng xuất, thì tôi khuyên bạn chỉ nên xóa cookie phiên, vì đăng xuất thực sự chỉ là chấm dứt phiên. Nếu không, bạn sẽ mất các cài đặt tiềm năng mà người dùng muốn duy trì trong các phiên.
dsingleton

19
Đảm bảo gọi [[NSUserDefaults standardUserDefaults] đồng bộ hóa] để đảm bảo các thay đổi được lưu vào đĩa. @felipe đây là lý do tại sao bạn thấy cookie trở lại trong các lần chạy tiếp theo.
Yeta Anotherjosh

Tôi đã thử điều này nhưng bộ nhớ trả về số 0, tôi kiểm tra nó trên iOS 8.Vậy làm cách nào để xóa cookie của facebook trên safari.
Nada Gamal

8

Chỉ muốn thêm một số thông tin về điều này.

Trong OS X 10.9 / iOS 7 trở lên, bạn có thể sử dụng -resetWithCompletionHandler: để xóa cookie và bộ nhớ cache, v.v. của toàn bộ ứng dụng khỏi sharedSession:

Làm trống tất cả cookie, bộ nhớ đệm và kho lưu trữ thông tin xác thực, xóa các tệp đĩa, chuyển các bản tải xuống đang tiến hành vào đĩa và đảm bảo rằng các yêu cầu trong tương lai sẽ xảy ra trên một ổ cắm mới.

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

Các cho trong vòng lặp với deleteCookie:âm thanh như điều chỉnh trong khi đếm một bộ sưu tập với tôi. (Không biết, có thể là một ý kiến ​​tồi?)


Tôi đã sử dụng cả hai phương pháp đều chạy thành công, nhưng tôi vẫn thấy rằng google vẫn hiển thị lịch sử tìm kiếm sau tất cả những điều này (không đăng nhập). Bất kỳ ý tưởng? Cảm ơn
mylogon

Điều này có ảnh hưởng đến bất kỳ trạng thái nào của Alamofire và việc tiêu thụ các API phụ trợ REST của tôi không? Alamofire có giải pháp nào dựa trên URLSession không?
Sajjon

1

Bạn có thể tạo một hàm bên trong html của WebView để làm sạch cookie.

Nếu bạn cần dọn dẹp chỉ một lần, bạn có thể kích hoạt chức năng này với sự kiện Titanium, chỉ khi ứng dụng khởi động.


1

Nếu ai đang tìm kiếm Giải pháp Swift:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.