我有一个登录的网站,我正在尝试设置一个WKWebView,我必须存储和恢复cookie来维护用户的会话,但是当我在我的wkwebview中注入存储的cookie时,用户必须再次登录!
我试图在代码的不同部分注入 cookie,但无事可做......
override func viewDidLoad() {
super.viewDidLoad()
webView.uiDelegate = self
webView.navigationDelegate = self
self.webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
loadCookies()
let myURL = URL(string:"http://staging.futurjob.it/dashboard")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
imageHeaderContainer.alpha = 0
btnBack.alpha = 0
btnForward.alpha = 0
imageHeaderContainer.frame.origin.y -= 100
btnBack.frame.origin.y -= 56
btnForward.frame.origin.y -= 56
UIView.animate(withDuration: 0.6) {
self.imageHeaderContainer.alpha = 1
self.btnBack.alpha = 1
self.btnForward.alpha = 1
self.imageHeaderContainer.frame.origin.y += 100
self.btnBack.frame.origin.y += 56
self.btnForward.frame.origin.y += 56
}
btnForward.dropShadow()
btnBack.dropShadow()
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
saveCookies()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
saveCookies()
}
func saveCookies() {
let cookieJar: HTTPCookieStorage = HTTPCookieStorage.shared
if let cookies = cookieJar.cookies {
let data: Data = NSKeyedArchiver.archivedData(withRootObject: cookies)
let ud: UserDefaults = UserDefaults.standard
ud.set(data, forKey: "cookie")
}
if #available(iOS 11.0, *) {
webView.configuration.websiteDataStore.httpCookieStore.getAllCookies { cookies in
for aCookie in cookies {
HTTPCookieStorage.shared.setCookie(aCookie)
}
print(cookies)
}
}
}
func loadCookies() {
let ud: UserDefaults = UserDefaults.standard
let data: Data? = ud.object(forKey: "cookie") as? Data
if let cookie = data {
let datas: NSArray? = NSKeyedUnarchiver.unarchiveObject(with: cookie) as? NSArray
if let cookies = datas {
for c in cookies {
if let cookieObject = c as? HTTPCookie {
HTTPCookieStorage.shared.setCookie(cookieObject)
}
}
}
}
if #available(iOS 11.0, *) {
let cookies = HTTPCookieStorage.shared.cookies ?? []
for cookie in cookies {
webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie)
}
}
}
}
我希望用户的会话是手动的。
检查一下:https://forums.developer.apple.com/thread/99674,WkWebView在cookie方面存在问题,已经存在的WKWebview有时会忽略设置的cookie。解决方法是先设置 cookie,然后创建 WKWebView