Immer alle cookies von WKWebView
beim abrufen der cookies von UIWebView
scheint einfach durch die Verwendung NSHTTPCookieStorage.sharedHTTPCookieStorage()
scheint es WKWebView
speichert die cookies irgendwo sonst.
Habe ich einige der Forschung, und ich war in der Lage zu Holen ein paar Kekse aus der packte es aus NSHTTPURLResponse
Objekt. dies bedeutet jedoch nicht, enthalten alle cookies WKWebView
:
func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {
if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url)
for cookie in cookies {
logDebug(cookie.description)
logDebug("found cookie " + cookie.name + " " + cookie.value)
}
}
}
}
Seltsam, es gibt auch eine Klasse WKWebsiteDataStore
in ios 9, die verantwortlich für die Verwaltung von cookies in WKWebView
jedoch die Klasse nicht enthalten, eine öffentliche Methode zum abrufen der cookies Daten:
let storage = WKWebsiteDataStore.defaultDataStore()
storage.fetchDataRecordsOfTypes([WKWebsiteDataTypeCookies], completionHandler: { (records) -> Void in
for record in records {
logDebug("cookie record is " + record.debugDescription)
for dataType in record.dataTypes {
logDebug("data type is " + dataType.debugDescription)
//get cookie data??
}
}
})
Gibt es eine Abhilfe für immer die cookie-Daten?
Erwähnenswert ist, dass das WebKit-team scheint auf einem richtigen Weg, um Zugang WKWebView Sie die cookie-Speicherung: bugs.webkit.org/show_bug.cgi?id=140191
haben Sie noch keine Lösung gefunden, ich bin mit dieser Arbeit von Monaten, aber nicht jede Lösung noch: - (
stackoverflow.com/questions/39772007/...
Sie haben nicht zu erwähnen get cookie-Daten 🙂
haben Sie noch keine Lösung gefunden, ich bin mit dieser Arbeit von Monaten, aber nicht jede Lösung noch: - (
stackoverflow.com/questions/39772007/...
Sie haben nicht zu erwähnen get cookie-Daten 🙂
InformationsquelleAutor aporat | 2015-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich
httpCookieStore
fürWKWebsiteDataStore
landete in iOS 11.https://developer.apple.com/documentation/webkit/wkwebsitedatastore?changes=latest_minor
InformationsquelleAutor Tualatrix Chou
Cookies verwendet (erstellt) durch den
WKWebView
sind tatsächlich richtig gespeichert in derNSHTTPCookieStorage.sharedHTTPCookieStorage()
.Das problem ist, dass die
WKWebView
schreibt nicht zurück die cookies sofort. Ich denke, er tut dies auf seinem eigenen Zeitplan. Zum Beispiel, wenn einWKWebView
geschlossen ist oder vielleicht regelmäßig.Schließlich damit Sie am Ende nicht dort, aber wenn ist unberechenbar.
Können Sie in der Lage sein zu zwingen, ein "sync", um die freigegebenen
NSHTTPCookieStorage
durch schließen Sie IhreWKWebView
. Bitte lassen Sie uns wissen, ob dies funktioniert.Update: ich erinnerte mich gerade, dass in Firefox für iOS zwingen wir die
WKWebView
Spülen, um seine internen Daten einschließlich der cookies, durch den Austausch IhrerWKProcessPool
mit einem neuen. Es gibt keine offizielle API, aber ich bin mir ziemlich sicher, dass die zuverlässigste Abhilfe jetzt.Jemand Erfahrungen mit dem beschriebenen Problemumgehung in dieser Antwort?
Was meinst du mit 'in der Nähe der
WKWebView
'? removeFromSuperview und legen Sie es auf null?es ist die Tat und so enttäuscht
Für diejenigen, die an dieser und verwirrt, ich buchstäblich habe:
self.webView.configuration.processPool = [[WKProcessPool alloc] init];
und es funktionierte Spülen, um die cookies so waren Sie inNSHTTPCookieStorage.sharedHTTPCookieStorage()
aber es funktioniert nur auf dem Gerät für mich, nicht simulator.InformationsquelleAutor Stefan Arentz
Details
Lösung
Nutzung
Vollständige Probe
Info.plist
fügen Sie in Ihrem Info.plist-transport-security-Einstellung
Code
Es funktioniert nur mit iOS-version >= 11
alle arbeiten rund um, bevor ios-11 ?
InformationsquelleAutor Vasily Bodnarchuk
Ich verwendet WKHTTPCookieStore in Objective-C, Das funktionierte für mich, um sowohl persistente und Sitzungs-cookies, aber es funktioniert nur auf iOS-11+
https://developer.apple.com/documentation/webkit/wkhttpcookiestore?changes=latest_minor&language=objc
Zwingt die WKWebView Spülen, um Ihre internen Daten, die durch den Austausch Ihrer WKProcessPool wie beschrieben von Stefan ' s Antwort war für mich in iOS 10 und 11, aber nur für die persistenten cookies; es scheint, dass session-cookies entfernt, wie J. Thoo beschrieben
InformationsquelleAutor Jorge Duque
Wie Stefan bereits erwähnt, werden cookies gespeichert
NSHTTPCookieStorage.sharedHTTPCookieStorage()
Jedoch aus meinen versuchen fand ich, dass Session-cookies, die vom server nicht sichtbar sind
NSHTTPCookieStorage.sharedHTTPCookieStorage()
.Solange jeder
WKWebView
teilen sich die gleiche Instanz vonWKProcessPool
, werden diese Session-cookies zurück an den server für jede Anforderung. Wenn Sie den Prozess ändern-pool für eineWKWebView
Sie sind im wesentlichen das entfernen der session-cookies für alle zukünftigen Anfragen.InformationsquelleAutor J.Thoo
In der Praxis fand ich in der Methode des "decidePolicyForNavigationResponse", können Sie wie folgt abrufen cookies, aber das traurige daran ist, es ist nicht eine komplette/eine ganze Liste für eine Sitzung.
InformationsquelleAutor ikzjfr0
In
NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url)
, was passiert, wenn die url, wo das setzen von cookies ist nicht eine navigation, die response-url (die url, die bewirkt, dass eine navigation)? Ich merke, die callback-url, wo das setzen von cookies wird nie aufgerufen in decidePolicyFor navigationResponse.Den oben delegieren, ist niemals ausgeführt, für die callback-url, da die callback-selbst nicht verursacht, eine Seite navigation.
cookies(withResponseHeaderFields::)
InformationsquelleAutor Qin Zhengquan
InformationsquelleAutor Vivek
Nicht verschwenden Sie Zeit, in der Gewinnung von cookies von
iOS 11 below device
, es gibt nur sehr weniger Chancen, auch gelungen. Cookie-Extraktion kann blockiert werden aufgrund von Sicherheitsgründen.Beziehen sich diese Protokolle:
Versuchen, diesen code, das ist bauen für die unter iOS 11 Geräte:
Den obigen code geben Sie leere cookie-array, wie cookies Extraktion blockiert werden aufgrund von Sicherheitsgründen.
Ich würde Ihnen empfehlen, versuchen Sie folgenden, die bestimmt ist für iOS 11 und höher:
InformationsquelleAutor HSAM
Dieser Beitrag hat nützliche Informationen über die cookie-Behandlung mit WKWebView. Nach dieser sollten Sie in der Lage sein, festlegen und abrufen von cookies mithilfe der standard-NSURLCache und NSHTTPCookie. Er bezieht sich auch auf die Verwendung WKProccessPool als pro Stephan ' s Kommentar.
InformationsquelleAutor Fuad Kamal