How to manage cookies with UIWebView in Swift

后端 未结 8 833
心在旅途
心在旅途 2020-12-02 11:53

What about have a topic where people can easily see how to manage cookies in a webview using the new language Swift? If you check in internet you won\'t find anything intere

相关标签:
8条回答
  • 2020-12-02 12:01

    swift 2.0

    let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
    for cookie in storage.cookies! {
     storage.deleteCookie(cookie)
    }
    NSUserDefaults.standardUserDefaults().synchronize()
    
    0 讨论(0)
  • 2020-12-02 12:01

    Thanks for the swift "translation"... Just needed to change the deletion to as! to force downcast:

    var storage : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
    for cookie in storage.cookies  as! [NSHTTPCookie]
    {
        storage.deleteCookie(cookie)
    }
    NSUserDefaults.standardUserDefaults()
    
    0 讨论(0)
  • 2020-12-02 12:02

    Here is the complete answer with how to capture cookies with UIWebView's delegate function:

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

    Keep in mind that cookies will saved as default and this delegate function calls every movement that finished with webview load. (It's also updated with Swift 3.0.1)

    0 讨论(0)
  • 2020-12-02 12:07

    swift 3 clear version

    Save cookies

    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()
    }
    

    Load cookies :

    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)
        }
    }
    

    You can call these functions like the following code

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

    Do not forget to have a delegate of your WebView for webViewDidStartLoad and webViewDidFinishLoad

    0 讨论(0)
  • 2020-12-02 12:08

    Try this code:

    SEE COOKIES STORED

        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)
        }
    

    swift 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 讨论(0)
  • 2020-12-02 12:10

    swift 3

        let storage = HTTPCookieStorage.shared
    
        for cookie in storage.cookies! {
            storage.deleteCookie(cookie)
        }
    
    0 讨论(0)
提交回复
热议问题