Как управлять кукисами с помощью UIWebView в Swift
Как насчет темы, в которой люди могут легко увидеть, как управлять кукисами в веб-просмотре, используя новый язык Swift? Если вы зарегистрируетесь в Интернете, вы не найдете ничего интересного, когда вам нужно это реализовать. Даже документация с яблоком оставляет желать лучшего.
Кто-нибудь знает, как обрабатывать этот процесс в Swift? Это то, что я нашел, но в Obj-C:
СМОТРИТЕ КОРПУСЫ
NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [cookieJar cookies]) {
NSLog(@"%@", cookie);
}
УДАЛИТЬ ЗАПОМНЕННЫЕ КОРПУСЫ
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Было бы хорошо для всех, если бы мы могли дать на этот раз ответ на этот вопрос!
Ура!
Ответы
Ответ 1
Попробуйте этот код:
СМОТРИТЕ КОРПУСЫ
if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies {
for cookie in cookies {
NSLog("\(cookie)")
}
}
УДАЛИТЬ ЗАПОМНЕННЫЕ КОРПУСЫ
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)
}
Ответ 2
swift 2.0
let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie in storage.cookies! {
storage.deleteCookie(cookie)
}
NSUserDefaults.standardUserDefaults().synchronize()
Ответ 3
Спасибо за быстрый "перевод"... Просто нужно изменить удаление как! чтобы заставить downcast:
var storage : NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie in storage.cookies as! [NSHTTPCookie]
{
storage.deleteCookie(cookie)
}
NSUserDefaults.standardUserDefaults()
Ответ 4
Вот полный ответ с тем, как захватить файлы cookie с помощью функции делегата UIWebView:
func webViewDidFinishLoad(_ webView: UIWebView) {
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
print("cookie= \(cookie)")
}
}
}
Имейте в виду, что файлы cookie будут сохранены по умолчанию, и эта функция делегата вызывает все движения, которые заканчиваются загрузкой webview. (Он также обновлен с помощью Swift 3.0.1)
Ответ 5
скоростная версия 3 четкой версии
Сохранить файлы cookie
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()
}
Загрузить файлы cookie:
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)
}
}
Вы можете вызвать эти функции, как следующий код
func webViewDidStartLoad(_ webView: UIWebView) {
loadCookies()
}
func webViewDidFinishLoad(_ webView: UIWebView) {
saveCookies()
}
Не забывайте иметь делегата вашего WebView для webViewDidStartLoad и webViewDidFinishLoad
Ответ 6
swift 3
let storage = HTTPCookieStorage.shared
for cookie in storage.cookies! {
storage.deleteCookie(cookie)
}
Ответ 7
Выход для api ВКонтакте, быстрый 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);
})
}
}
}