我正在构建一个使用单点登录的应用程序供用户登录。用户成功输入 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/