ios - 清除 iOS 8.4 上 WKWebView 的 Cookie

标签 ios cookies uiwebview wkwebview nsmutableurlrequest

我正在构建一个使用单点登录的应用程序供用户登录。用户成功输入 ID 和密码后,Web 端会返回 header ,我会获取这些 header 并将其存储在我的应用程序中。 WKWebView 还设置了一个用户成功登录的 cookie。这是我想要避免或撤消的。

我看到的不良行为是,如果我登录一个用户,一切顺利,然后我注销他们并重新登录,WKWebView 认为用户仍然登录并接受他们到不需要的 URL。

在 iOS 9 中,缓解这种情况非常简单:

let config = WKWebViewConfiguration()
config.websiteDataStore = WKWebsiteDataStore.nonPersistentDataStore()

let webView = WKWebView(frame: .zero, configuration: config)

但是在 iOS 8.4 中,确保每次用户进入加载单点登录 URL 时清除 cookie 变得更加复杂。

我尝试过在 NSHTTPCookieStorage.sharedHTTPCookieStorage() 中循环遍历 cookie 并删除它们的方法。不幸的是,cookie 计数为 0。

我还尝试删除 NSFileManager.defaultManager() 中的 /Cookies 目录。这也行不通。

某种程度上起作用的一件事是执行以下操作。尽管这种方法不允许我获取 header ,因为需要在登录后进行重定向,这会造成干扰(在 iOS 9+ 和 8.4 中)

req = NSMutableURLRequest(URL: url)
req?.HTTPShouldHandleCookies = false
let webView = WKWebView()
webView.loadRequest(req ?? NSURLRequest(URL: url))

如果这是一个可能的解决方案,我更愿意在保存我的 WKWebView 的 View 的 deinit 中清除 cookie。

最佳答案

这可能不太可能,但是覆盖 cookie 接受策略以在登录时拒绝所有 cookie 怎么样?

NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = .Never

另一个想法是使用自定义 WKProcessPool 子类(未真正记录)手动管理 cookie。我相信就是这样Firefox管理任何 cookie 问题。

关于ios - 清除 iOS 8.4 上 WKWebView 的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38081744/

相关文章:

iphone - 以编程方式隐藏 UITabBar

javascript 如何简单地设置和检索 cookie

iphone - uiwebview中如何实现触摸事件?

javascript - 如何将值从 javascript 传递到 iOS UIWebView

ios - iOS:我应该使用Core Data还是NSUserDefaults?

iOS:当我在导航堆栈中向下 2 层时,如何访问 Root View Controller 中使用的变量?

android - 使用 inappbrowser 的隐藏和显示方法在 phonegap 应用程序中不起作用

php - 如何在查询时区分管理员和用户?

javascript - express - 如何在对 API 的请求中读取 HttpOnly cookie?

iphone - 在 iOS 6 上的 UIWebView 中全屏播放 YouTube 视频