gpt4 book ai didi

swift - 如何使用 WKWebView/WKHTTPCookieStore 在应用程序重新启动时保留 cookie

转载 作者:行者123 更新时间:2023-11-30 10:44:52 25 4
gpt4 key购买 nike

我需要在应用程序重新启动时保留我的 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

在我的应用程序中的不同 Web View 之间共享 cookie 存储
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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com