- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在应用程序重新启动时保留我的 cookie。
最初在使用 UIWebView
时,我能够通过 UserDefaults
上的扩展来实现此目的
import Foundation
extension UserDefaults {
typealias CookieProperties = [HTTPCookiePropertyKey: Any]
private static let cookieKey = "app_cookie_jar"
func storeCookies() {
guard let cookies = HTTPCookieStorage.shared.cookies else { return }
let cookiePropertiesArray = cookies.compactMap { $0.properties }
set(cookiePropertiesArray, forKey: UserDefaults.cookieKey)
synchronize()
}
func fetchCookies() {
let cookiePropertiesArray = value(forKey: UserDefaults.cookieKey) as? [CookieProperties]
cookiePropertiesArray?.forEach {
if let cookie = HTTPCookie(properties: $0) {
HTTPCookieStorage.shared.setCookie(cookie)
}
}
}
}
然后我会在各种生命周期方法中调用它
func applicationWillEnterForeground() {
defaults.fetchCookies()
...
}
func applicationDidEnterBackground() {
defaults.storeCookies()
...
}
但是现在我的应用程序正在使用 WKWebView
并且我有相同的要求。我目前正在通过共享单例 WKProcessPool
class ProcessPool {
static let shared = WKProcessPool()
}
但是,重新启动后,某些 cookie 不会保留。主要是没有 exp
日期且无法在服务器上更新为具有日期的 cookie。
上面的扩展使用 HTTPCookieStorage
但是我需要使用 WKHTTPCookieStore
实现相同方式(或更好)的东西,并且不确定如何实现。
我本来希望做这样的事情
func storeCookies() {
let __cookies = WKHTTPCookieStore()
__cookies.getAllCookies { cookies in
....
}
}
但我不相信可以通过这种方式调用WKHTTPCookieStore
。
我也非常清楚有关敏感数据的问题,例如 UserDefaults
中的 cookie,这不是一个生产应用程序,早在发布之前就会删除此功能并替换为适当、安全的解决方案。遗憾的是,这正是我们目前产品的处境。
最佳答案
您需要首先访问 WKWebsiteDataStore
,这将使您能够访问 cookie 存储。
func storeCookies() {
let __cookies = WKWebsiteDataStore.default()
__cookies.httpCookieStore.getAllCookies { cookies in
print(cookies)
}
}
关于swift - 如何使用 WKWebView/WKHTTPCookieStore 在应用程序重新启动时保留 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946220/
我们的 iOS 应用程序从 WKHTTPCookieStore 读取 cookie 以调用初始化网络服务。如果我们正在寻找的特定 cookie 不存在于 CookieStore 中,将在 web 服务
iOS 11 为 WKWebView 带来了一些更新,包括 cookies 管理。我已经开始从 UIWebView 迁移我的应用程序并遇到了一个问题:即使 WKHttpCookieStore 提供了一
我们的应用程序允许通过 SSO 登录,我们通过启动 WKWebKit View 到与我们的服务器通信的特定 URL,并最终重定向到我们期望的 URL 来实现。在此过程中,我们获得了一个 cookie,
我正在使用新的 WKHTTPCookieStore 类,以便从应用程序的 WKWebViews 中注入(inject)和删除 cookie。 所有 WKWebViews 共享一个公共(public)的
我需要在 WKWebView 实例之间共享 cookie - 为此,我使用单个 WKWebViewConfiguration 实例,然后用于初始化每个 WKWebView。 为了做到这一点,我假设我必
我需要在应用程序重新启动时保留我的 cookie。 最初在使用 UIWebView 时,我能够通过 UserDefaults 上的扩展来实现此目的 import Foundation extensio
我是一名优秀的程序员,十分优秀!