我正在做一个iOS网络应用,我想保存凭证以保持会话的打开。这是我第一次开发iOS应用。
目前我只做这个。
class ViewController: UIViewController {
@IBOutlet weak var KronosWebsite: WKWebView!
let myUrl = URL(string:"https://mobi.kronos-sport.com")
override func viewDidLoad() {
super.viewDidLoad()
let myRequest = URLRequest(url : myUrl!)
KronosWebsite.load(myRequest)
}
}
虽然从你的问题来看,我认为这不是你要找的东西,正确的存储凭证的方法是有一个API路由,你可以在其中获得一个访问令牌和一个刷新令牌,你将使用它来与API交互,即使你只是想把它作为一个登录。最好是使用OAuth(因为它是最安全的),但坦率地说,你可以使用任何你认为适合你的解决方案。
注意事项: 访问和刷新令牌应该保存在iOS钥匙链中,因为它是最安全的存储凭证的方式。
钥匙链是存储小秘密的最佳场所,比如密码和加密密钥。 https:/developer.apple.comdocumentationsecuritycertificate_key_and_trust_serviceskeysstoring_keys_in_the_keychain。
注: 另外,如果您有必要,您可以像这样存储WKWebView的cookies (但这不是标准的)。
if #available(iOS 11, *) {
let dataStore = WKWebsiteDataStore.default()
dataStore.httpCookieStore.getAllCookies({ (cookies) in
print(cookies)
})
} else {
guard let cookies = HTTPCookieStorage.shared.cookies else {
return
}
print(cookies)
}
更多关于存储Cookies的内容:https:/medium.combetter-programminghow-toget-cookies-from-wkwebview-and-uiwebview-in-swift-46e1a072a606。
@JuanCarlos我试着做一些类似的事情,但我不知道如何存储字典。
func storeCookies(){
if #available(iOS 11, *) {
let dataStore = WKWebsiteDataStore.default()
dataStore.httpCookieStore.getAllCookies { cookies in
var c: [String:String]=[:]
for cookie in cookies {
c[cookie.name]=cookie.value
}
print(c)
SecItemAdd(c as CFDictionary,nil)
}
} else {
guard let cookies = HTTPCookieStorage.shared.cookies else {
return
}
var c: [String:String]=[:]
for cookie in cookies {
var c: [String:String] = [cookie.name:cookie.value]
c[cookie.name]=cookie.value
}
SecItemAdd(c as CFDictionary,nil)
}
}