2014-12-18 17 views
19

Điều gì về việc có một chủ đề mà mọi người có thể dễ dàng xem cách quản lý cookie trong chế độ xem web bằng ngôn ngữ mới Swift? Nếu bạn kiểm tra trong internet, bạn sẽ không tìm thấy bất cứ điều gì thú vị khi bạn cần phải thực hiện điều này. Ngay cả các tài liệu của táo là người nghèo.Cách quản lý cookie bằng UIWebView trong Swift

Có ai biết cách xử lý các quy trình này trong Swift không? Đây là những gì tôi tìm thấy nhưng trong obj-C:

SEE Stored Cookies

NSHTTPCookie *cookie; 
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
for (cookie in [cookieJar cookies]) { 
NSLog(@"%@", cookie); 
} 

DELETE Stored Cookies

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

Nó sẽ được tốt đẹp cho tất cả mọi người nếu chúng ta có thể cung cấp cho một lần một câu trả lời cho điều này! Chúc mừng!

Trả lời

33

Hãy thử mã này:

SEE Stored Cookies

if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies { 
     for cookie in cookies { 
      NSLog("\(cookie)") 
     } 
    } 

DELETE Stored Cookies

var storage : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
    for cookie in storage.cookies as! [NSHTTPCookie]{ 
     storage.deleteCookie(cookie) 
    } 

nhanh chóng 2,0

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
for cookie in storage.cookies! { 
storage.deleteCookie(cookie) 
} 

Swift 3,0

if let cookies = HTTPCookieStorage.shared.cookies { 
    for cookie in cookies { 
     NSLog("\(cookie)") 
    } 
} 

let storage = HTTPCookieStorage.shared 
for cookie in storage.cookies! { 
    storage.deleteCookie(cookie) 
} 
+0

Hi! Te phương pháp để xem các tập tin cookie hoạt động tuyệt vời! Cảm ơn bạn :) Rất nhiều người sẽ đánh giá cao điều này ;-) Người xóa cookie không .. storage.deleteCookie (cookie) gây ra lỗi: "Không thể chuyển đổi loại biểu thức AnyObject thành NSHTTPCookie -> Void – ernestocattaneo

+0

Tôi đã không kiểm tra mã mà tôi chỉ cần chuyển đổi nó thành swift.now hãy để tôi kiểm tra này. :) –

+0

Tôi đã cập nhật câu trả lời kiểm tra nó –

3

Cảm ơn đã nhanh chóng "dịch" ... Chỉ cần thay đổi xóa là! để buộc nhìn xuống:

var storage : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
for cookie in storage.cookies as! [NSHTTPCookie] 
{ 
    storage.deleteCookie(cookie) 
} 
NSUserDefaults.standardUserDefaults() 
+0

được thêm ở trên với chỉnh sửa –

5

nhanh chóng 2,0

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
for cookie in storage.cookies! { 
storage.deleteCookie(cookie) 
} 
NSUserDefaults.standardUserDefaults().synchronize() 
+1

'NSUserDefaults.standardUserDefaults(). synchronize()' là gì? –

0

nhanh chóng 3

let storage = HTTPCookieStorage.shared 

    for cookie in storage.cookies! { 
     storage.deleteCookie(cookie) 
    } 
2

Dưới đây là câu trả lời hoàn chỉnh với cách chụp cookie có chức năng đại biểu UIWebView của:

func webViewDidFinishLoad(_ webView: UIWebView) { 
    if let cookies = HTTPCookieStorage.shared.cookies { 
     for cookie in cookies { 
      print("cookie= \(cookie)") 
     } 
    } 
} 

Xin lưu ý rằng cookie sẽ được lưu làm mặc định và chức năng ủy nhiệm này sẽ gọi mọi chuyển động đã kết thúc bằng lượt tải trang web. (Nó cũng được cập nhật với Swift 3.0.1)

4

nhanh chóng 3 rõ ràng phiên bản

Lưu cookie

func saveCookies() { 
    guard let cookies = HTTPCookieStorage.shared.cookies else { 
     return 
    } 
    let array = cookies.flatMap { (cookie) -> [HTTPCookiePropertyKey: Any]? in 
     cookie.properties 
    } 
    UserDefaults.standard.set(array, forKey: "cookies") 
    UserDefaults.standard.synchronize() 
} 

tải các tập tin cookie:

func loadCookies() { 
    guard let cookies = UserDefaults.standard.value(forKey: "cookies") as? [[HTTPCookiePropertyKey: Any]] else { 
     return 
    } 
    cookies.forEach { (cookie) in 
     guard let cookie = HTTPCookie.init(properties: cookie) else { 
      return 
     } 
     HTTPCookieStorage.shared.setCookie(cookie) 
    } 
} 

Bạn có thể gọi các chức năng giống như đoạn mã sau

func webViewDidStartLoad(_ webView: UIWebView) { 
    loadCookies() 
} 

func webViewDidFinishLoad(_ webView: UIWebView) { 
    saveCookies() 
} 

Đừng quên để có một đại biểu của WebView của bạn cho webViewDidStartLoadwebViewDidFinishLoad

+1

Rất cám ơn, Giải pháp thông minh. – Profstyle

0

Thoát cho api VKontakte, nhanh chóng 3+

let dataStore = WKWebsiteDataStore.default() 
dataStore.fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { (records) in 
    for record in records { 
     if record.displayName.contains("facebook") { 
      dataStore.removeData(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), for: [record], completionHandler: { 
       print("Deleted: " + record.displayName); 
      }) 
     } 
    } 
} 
Các vấn đề liên quan