Comment gérer les cookies avec UIWebView dans Swift

Qu'avoir un sujet où les gens peuvent facilement voir comment gérer les cookies dans une webview en utilisant le nouveau langage Swift? Si vous vérifiez internet vous ne trouverez rien d'intéressant quand vous avez besoin de mettre en œuvre ceci. Même la documentation d'apple est médiocre.

quelqu'un sait comment gérer ces processus dans Swift? C'est ce que j'ai trouvé mais à Obj-C:

VOIR COOKIES STOCKÉS

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

SUPPRIMER STOCKÉ COOKIES

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

Ce serait bien pour tout le monde si nous pouvons donner pour un temps une réponse à cette! Acclamations!

21
demandé sur ernestocattaneo 2014-12-18 12:59:36

8 réponses

Essayez ce code:

VOIR COOKIES STOCKÉS

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

SUPPRIMER LES COOKIES STOCKÉS

    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)
}
36
répondu Dharmesh Kheni 2017-02-05 11:10:55

swift 3 version claire

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

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

Vous pouvez appeler ces fonctions comme le code suivant

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

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

N'oubliez pas d'avoir un délégué de votre WebView pour webViewDidStartLoad et webViewDidFinishLoad

6
répondu Clément Chameyrat 2017-06-20 17:38:20

swift 2.0

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie in storage.cookies! {
 storage.deleteCookie(cookie)
}
NSUserDefaults.standardUserDefaults().synchronize()
5
répondu magnuskahr 2015-12-20 21:10:12

Merci pour la "traduction"rapide... Juste besoin de changer la suppression! à force abattu:

var storage : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie in storage.cookies  as! [NSHTTPCookie]
{
    storage.deleteCookie(cookie)
}
NSUserDefaults.standardUserDefaults()
3
répondu zzpaf 2015-05-13 09:08:06

Voici la réponse complète avec comment capturer des cookies avec la fonction de délégué D'UIWebView:

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

gardez à l'esprit que les cookies seront sauvegardés par défaut et cette fonction de délégué appelle chaque mouvement qui s'est terminé avec la charge webview. (Il est également mis à jour avec Swift 3.0.1)

2
répondu mathema 2017-01-02 18:25:53

Si vous travaillez sur swift 4 ce code va désactiver cookies et supprimer l'URL de cache.

let cookieJar : HTTPCookieStorage = HTTPCookieStorage.shared
for cookie in cookieJar.cookies! as [HTTPCookie]{
    NSLog("cookie.domain = %@", cookie.domain)
     cookieJar.deleteCookie(cookie)
}

URLCache.shared.removeAllCachedResponses() 
URLCache.shared.diskCapacity = 0 
URLCache.shared.memoryCapacity = 0
1
répondu pansora abhay 2018-05-02 13:54:10

swift 3

    let storage = HTTPCookieStorage.shared

    for cookie in storage.cookies! {
        storage.deleteCookie(cookie)
    }
0
répondu ifedapo olarewaju 2016-11-06 09:39:03

Déconnexion pour api VKontakte, swift 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);
            })
        }
    }
}
0
répondu BYCHKOVSKIY 2017-10-14 13:51:09