web-dev-qa-db-ja.com

SwiftでUIWebViewを使用してCookieを管理する方法

新しい言語のSwiftを使用してWebビューでCookieを管理する方法を簡単に確認できるトピックがあるとしたらどうでしょうか。インターネットをチェックインすると、これを実装する必要があるときに何も面白いものが見つかりません。 Appleによるドキュメンテーションも貧弱です。

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

これに対する答えを一度だけ与えることができれば、誰にとっても素晴らしいことです!乾杯!

22
ernestocattaneo

このコードを試してください:

保存されたクッキーを見る

    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.

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
for cookie in storage.cookies! {
 storage.deleteCookie(cookie)
}

Swift 3.

if let cookies = HTTPCookieStorage.shared.cookies {
    for cookie in cookies {
        NSLog("\(cookie)")
    }
}

let storage = HTTPCookieStorage.shared
for cookie in storage.cookies! {
    storage.deleteCookie(cookie)
}
43
Dharmesh

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

webViewDidStartLoadおよびwebViewDidFinishLoadのWebViewのデリゲートを忘れないでください

6
VelocityPulse

Swift 2.

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

Swift "translation" ...に感謝します。削除をas!に変更してダウンキャストを強制する必要がありました。

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

Swift 4で作業している場合、このコードはcookiesRLキャッシュの削除を無効にします。

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

UIWebViewのデリゲート関数を使用してCookieをキャプチャする方法に関する完全な回答を次に示します。

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

Cookieはデフォルトとして保存され、このデリゲート関数はwebviewのロードで終了したすべての動きを呼び出すことに注意してください。 (Swift 3.0.1で更新されています)

2
mathema

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

    let storage = HTTPCookieStorage.shared

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