作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
iOS 11 为 WKWebView 带来了一些更新,包括 cookies 管理。我已经开始从 UIWebView 迁移我的应用程序并遇到了一个问题:即使 WKHttpCookieStore 提供了一种删除 cookie 的方法(deleteCookie:completionHandler:,Xamarin 包装器:DeleteCookieAsync),事实上 它不会删除所有 cookie。这是我的代码:
WKHttpCookieStore cookieStore = WKWebsiteDataStore.DefaultDataStore.HttpCookieStore;
// Delete all cookies
NSHttpCookie[] allCookies = await cookieStore.GetAllCookiesAsync();
foreach (NSHttpCookie cookieToDelete in allCookies)
{
await cookieStore.DeleteCookieAsync(cookieToDelete);
}
NSHttpCookie[] newCookies = await cookieStore.GetAllCookiesAsync();
// why newCookies is not an empty array?
myWkWebView.LoadRequest(new NSUrlRequest(new NSUrl("https://facebook.com/")));
例如,这个 cookie 正在被删除:
NSHTTPCookie
version:1
name:c_user
value:100015842...
expiresDate:'2017-12-27 07:37:39 +0000'
created:'2017-09-28 07:39:01 +0000'
sessionOnly:FALSE
domain:.facebook.com
partition:none
path:/
isSecure:TRUE
path:"/"
isSecure:TRUE
但这一个不是:
NSHTTPCookie
version:1
name:sb
value:bKbMW......OJ1V
expiresDate:'2019-09-28 07:37:39 +0000'
created:'2017-09-28 07:39:15 +0000'
sessionOnly:FALSE
domain:.facebook.com
partition:none
path:/
isSecure:TRUE
path:"/"
isSecure:TRUE
原生 Swift 应用程序也有同样的问题。我很困惑,因为类似的代码适用于 NSHttpCookieStorage
+ UIWebView
。
这是预期的行为吗?如果是这样,为什么?有没有办法清除 WKHttpCookieStore
中的 cookie?
最佳答案
如果您想删除所有 cookie,那么在 WKWebsiteDataStore
上执行此操作会更容易。在 Objective-C 中:
NSSet *websiteDataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeCookies]];
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes
modifiedSince:dateFrom
completionHandler:nil];
请注意,这适用于 iOS 9 及更高版本。
关于ios - 如何从 WKHttpCookieStore 中删除 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465070/
我是一名优秀的程序员,十分优秀!