web-dev-qa-db-fra.com

Comment gérer les cookies avec UIWebView dans Swift

Qu'en est-il d'un sujet où les gens peuvent facilement voir comment gérer les cookies dans une vue Web à l'aide du nouveau langage Swift? Si vous vous enregistrez sur Internet, vous ne trouverez rien d'intéressant lorsque vous aurez besoin de le mettre en œuvre. Même la documentation fournie par Apple est médiocre.

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

VOIR LES COOKIES STOCKÉS  

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

SUPPRIMER LES COOKIES STOCKÉS

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 pouvions donner pour une fois une réponse à cela!

21
ernestocattaneo

Essayez ce code:

VOIR LES 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)
}
39
Dharmesh

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
Clément Chameyrat

Swift 2.0

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

Merci pour la "traduction" Swift ... Il suffisait de modifier la suppression en tant que! pour forcer vers le bas:

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

Si vous travaillez sur Swift 4 , ce code désactivera les cookies et aussi supprimera le cache URL .

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
2
pansora abhay

Voici la réponse complète sur la façon de capturer les cookies avec la fonction de délégué de UIWebView:

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

N'oubliez pas que les cookies sont enregistrés par défaut et que cette fonction de délégué appelle chaque mouvement ayant abouti au chargement de la visualisation Web. (Il est également mis à jour avec Swift 3.0.1 )

2
mathema

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
BYCHKOVSKIY

Swift 3

    let storage = HTTPCookieStorage.shared

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