9

对于 iOS 8 应用程序,我想使用WKWebView我正在构建的自定义身份验证 ViewController。但是,我似乎无法弄清楚如何清除存储的WKWebView. 现在根本不可能吗?

我无法控制服务器端,并且当用户成功登录时,该服务正在发送看起来像永久(或至少长期存在)的 cookie。问题是,如果用户想要更改他们的登录,那么它就变得不可能了,因为即使用户注销并再次按下登录,服务器也会使用存储的 cookie 自动重定向并再次登录。

开放的想法和建议,谢谢!

清除存储的 cookie 很简单,UIWebView您所要做的就是:

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

但是,WKWebView似乎没有使用 NSHTTPCookieStorage 因为我已经尝试在加载请求之前这样做WKWebView!:(

4

3 回答 3

5

答案是在 Apple 内部论坛上提供给我的:使用可变的 NSURLRequest,并设置HTTPShouldHandleCookies为 NO:

let req: NSMutableURLRequest = NSMutableURLRequest(URL:openURL)
req.HTTPShouldHandleCookies = false
webView.loadRequest(req)

没有 cookie 发送到网站,因此您每次都会获得登录屏幕(用于测试)。

于 2014-11-06T20:37:00.397 回答
5

NSHTTPCookieStorage现在似乎在 iOS 8.2用于根据需要正确清除 cookie。WKWebView我已经发布了一个应用程序,该应用程序将在打开基于登录之前运行此代码:

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

在 iOS 8.2 之前,网站会使用保存的 cookie 自动登录,现在它正确地要求用户重新登录。这一切都是在我没有向应用程序发送更新的情况下发生的。:)

感谢@jackreichert 的提醒!

于 2015-03-16T08:16:59.733 回答
0

尽管对于常见的用例来说,删除 cookie 就足够了,但是在 webview 中存储数据的方式太多了,例如本地数据库、会话存储、SQL 数据存储等。

这个单线应该通过删除所有这些数据来解决问题:

WKWebsiteDataStore.default().removeData(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), modifiedSince: Date(timeIntervalSince1970: 0), completionHandler: {})
于 2021-09-22T21:40:07.070 回答