2014-12-18 9 views
19

Wie wäre es mit einem Thema, wo Leute leicht sehen können, wie man Cookies in einem Webview mit der neuen Sprache Swift verwaltet? Wenn Sie im Internet einchecken, werden Sie nichts Interessantes finden, wenn Sie dies umsetzen müssen. Selbst die Dokumentation von Apple ist schlecht.Wie man Cookies mit UIWebView in Swift verwaltet

Kann jemand in Swift mit diesen Prozessen umgehen? Dies ist, was ich gefunden, aber in Obj-C:

SEE Cookies gespeichert

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]; 

Es wäre für alle schön, wenn wir für geben kann Einmal eine Antwort darauf! Prost!

Antwort

33

Versuchen Sie diesen Code:

SEE Cookies gespeichert

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

DELETE gespeicherten 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

Hallo! Die Methode, um Cookies zu sehen, funktioniert großartig! Vielen Dank :) Viele Leute werden das zu schätzen wissen ;-) Dasjenige zum Löschen von Cookies nicht .. storage.deleteCookie (cookie) verursacht einen Fehler: "Kann den Ausdruck Typ AnyObject nicht konvertieren, um NSHTTPCookie -> Void – ernestocattaneo

+0

Ich habe diesen Code nicht überprüft ich habe es nur in swift.now lassen Sie mich das überprüfen :) –

+0

Ich habe die Antwort aktualisiert überprüfen Sie es –

3

Dank für die schnellen "Übersetzung" ... einfach notwendig, um die Löschung zu ändern! zwingen gesenkten:

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

hinzugefügt mit edit –

5

swift 2,0

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

Was 'NSUserDefaults.standardUserDefaults(). syncrete()' ist für? –

0

swift 3

let storage = HTTPCookieStorage.shared 

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

Hier ist die vollständige Antwort mit, wie Cookies erfassen mit UIWebView Delegierter Funktion:

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

Beachten Sie, dass Cookies standardmäßig gespeichert werden und diese Delegatfunktion jede Bewegung aufruft, die mit dem Laden der Webansicht beendet wurde. (Es ist auch mit Swift 3.0 aktualisiert.1)

4

swift 3 klar Version

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

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

Sie diese Funktionen wie den folgenden Code aufrufen kann

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

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

Vergessen Sie nicht, einen Vertreter Ihrer WebView für haben webViewDidStartLoad und webViewDidFinishLoad

+1

Vielen Dank, Smart-Lösung. – Profstyle

0

Logout für api VKontakte, schnelle 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); 
      }) 
     } 
    } 
} 
Verwandte Themen