ios - 如何删除 WKWebview cookies

标签 ios xcode uiwebview wkwebview wkwebviewconfiguration

目前我是这样做的

    NSHTTPCookie *cookie;
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (cookie in [storage cookies])
    {
        [storage deleteCookie:cookie];
    }

但它不适用于 iOS 8、64 位设备。

WKWebview 的 clean cookie 有没有其他方式?任何帮助将不胜感激。谢谢。

最佳答案

Apple 为 iOS 9 发布了新的 API,因此现在我们可以使用以下代码删除为 WKWebView 存储的域特定 cookie。

Swift 4/5 版本:

let dataStore = WKWebsiteDataStore.default()
dataStore.fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in
  dataStore.removeData(
    ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(),
    for: records.filter { $0.displayName.contains("facebook") },
    completionHandler: completion
  )
}

下面是 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);
                })
            }
        }
    }

Objective-C 版本 -

WKWebsiteDataStore *dateStore = [WKWebsiteDataStore defaultDataStore];
[dateStore
   fetchDataRecordsOfTypes:[WKWebsiteDataStore allWebsiteDataTypes]
   completionHandler:^(NSArray<WKWebsiteDataRecord *> * __nonnull records) {
     for (WKWebsiteDataRecord *record  in records) {
       if ( [record.displayName containsString:@"facebook"]) {
         [[WKWebsiteDataStore defaultDataStore]
             removeDataOfTypes:record.dataTypes
             forDataRecords:@[record]
             completionHandler:^{
               NSLog(@"Cookies for %@ deleted successfully",record.displayName);
             }
         ];
       }
     }
   }
 ];

以上代码段肯定适用于 iOS 9 及更高版本。不幸的是,如果我们对 iOS 9 之前的 iOS 版本使用 WKWebView,我们仍然必须坚持传统的方法并删除整个 cookie 存储,如下所示。

NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *cookiesFolderPath = [libraryPath stringByAppendingString:@"/Cookies"];
NSError *errors;
[[NSFileManager defaultManager] removeItemAtPath:cookiesFolderPath error:&errors];

关于ios - 如何删除 WKWebview cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31289838/

相关文章:

ios - 自动填充用户名和密码 UIWebView Swift

ios - 将图像添加到类似于 UITextField 或其他文本输入 View 的内容

ios - 在 UIButtons 上禁用 UIPanGestureRecognizer

ios - Android Studio Flutter 调试时禁用断点

ios - 如何创建有线可循的室内导航?

xcode - Xcode 4 的最低规范?

ios - apple的app审核,要不要提供testflight的测试用户账号?

objective-c - Xcode - OpenEars 语言模型文件错误

xcode - 函数在 Swift 2 中不起作用。(已定义变量的标识符未解析)

ios - 在不使用 ASIHTTPRequest 的情况下在 iOS 中下载整个网页