我正在开发一个应用程序,使用单点登录让用户登录。当用户输入成功的ID和密码后,网页端会返回头信息,我会抓取并在我的应用程序中存储。WKWebView还会设置一个cookie来表示用户已成功登录。这正是我想避免或撤消的。
我看到的不良行为是,如果我让一个用户登录,一切都很顺利,然后我将其注销,再次登录时,WKWebView仍然认为用户已登录,并将其带到不需要的URL。
在iOS 9中,解决这个问题相当简单:
let config = WKWebViewConfiguration()
config.websiteDataStore = WKWebsiteDataStore.nonPersistentDataStore()
let webView = WKWebView(frame: .zero, configuration: config)
然而在iOS 8.4中,确保每次用户进入加载单点登录网址时清除Cookie更加复杂。我尝试过遍历NSHTTPCookieStorage.sharedHTTPCookieStorage()
中的Cookie并将它们移除的方法,但是Cookie计数为0。我也尝试过删除NSFileManager.defaultManager()
中的/Cookies
目录,但这也没有起作用。一种有点可行的方法是执行以下操作。虽然这种方法不允许我获取标头,因为需要登录后重定向会干扰(在iOS 9+和8.4中)。req = NSMutableURLRequest(URL: url)
req?.HTTPShouldHandleCookies = false
let webView = WKWebView()
webView.loadRequest(req ?? NSURLRequest(URL: url))
如果可能的话,我更喜欢在持有WKWebView的视图的deinit
中清除cookie作为解决方案。