gbk*_*gbk 6 nshttpcookie ios swift wkwebview nshttpcookiestorage
我想从WKWebView获取所有cookie.为什么?我已经启动了一个使用基于Web的身份验证的项目.因此,我应该拦截cookie以确保用户已登录并用于其他目的.另一种情况 - 想象一下,如果用户登录,而不是"杀死"应用程序 - 由于存储此cookie会话的一些延迟将丢失:(.
问题似乎是cookie被缓存而不是立即保存到文件中.
(@Kemenaran从这里 - 下面的第5页)
我试图抓住他们的地方 -
webView:decidePolicyForNavigationResponse:decisionHandler:,
func webView(webView: WKWebView, decidePolicyForNavigationResponse navigationResponse: WKNavigationResponse, decisionHandler: (WKNavigationResponsePolicy) -> Void) {
if let httpResponse = navigationResponse.response as? NSHTTPURLResponse {
if let headers = httpResponse.allHeaderFields as? [String: String], url = httpResponse.URL {
let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headers, forURL: url {
for cookie in cookies {
NSHTTPCookieStorage.shared.set(cookie)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但并非所有请求都是导航,因此跳过一个cookie(在我的情况下),请参阅下面的详细信息
关于我试过的其他选项的几句话......
WKHTTPCookieStore提到.但我的项目应该支持iOS 9+我100%肯定,在登录后5-10秒,所需的cookie将保存到NSHttpCookieStorage(至少我几天的所有测试都确认)
我尝试使用提供的观察者NSHTTPCookieManagerCookiesChangedNotification,但它只为内部的cookie提供回调webView:decidePolicyForNavigationResponse:decisionHandler
我也发现了这个雷达错误,这个问题和Sample项目,但我想防止这种情况.(在这篇文章中描述的不仅适用于删除而且适用于保存)此情况也是如此,当用户终止应用程序时,用户登录,杀死应用程序和重新启动的情况可能会出现.并且防止这种情况(简单地通过检查NSHttpCookieStorage所需的cookie也不是一个好主意,因为在登录后需要cookie可以存储一些延迟,所以这种方法需要一些bool-powered解决方案,看起来很奇怪..
我还阅读了一些相关问题的SO帖子,最有用的是
但仍然没有好的解决方案......
那么,是否存在获取或至少强制立即存储cookie的方法?
我以简单的“类似强制”的方式从网页中保存 Cookie。
获取我使用的所有 cookie
stringByEvaluatingJavaScriptFromString
与 JS 字符串类似document.cookie();. 结果我能够以带;分隔符的字符串形式接收所有 cookie。我需要做的就是解析字符串,创建 cookie 并将其设置为NSHttpSharedStorage
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |