如何在iOS的共享首选项中保存cookie?

如何在iOS的共享首选项中保存cookie? 我以后怎样才能解压? 我想将HTTPCookieStorage.shared.cookies中的cookie保存到用户的默认值,然后提取请在Swift 3中回答

试试这个代码:

商店:

func storeCookies() { let cookiesStorage = HTTPCookieStorage.shared let userDefaults = UserDefaults.standard let serverBaseUrl = "http://example.com" var cookieDict = [String : AnyObject]() for cookie in cookiesStorage.cookies(for: NSURL(string: serverBaseUrl)! as URL)! { cookieDict[cookie.name] = cookie.properties as AnyObject? } userDefaults.set(cookieDict, forKey: "cookiesKey") } 

检索:

 func restoreCookies() { let cookiesStorage = HTTPCookieStorage.shared let userDefaults = UserDefaults.standard if let cookieDictionary = userDefaults.dictionary(forKey: "cookiesKey") { for (_, cookieProperties) in cookieDictionary { if let cookie = HTTPCookie(properties: cookieProperties as! [HTTPCookiePropertyKey : Any] ) { cookiesStorage.setCookie(cookie) } } } } 

我使用Swift 4,WKWebView和iOS 11的解决scheme。在服务器推送的PHPSESSID没有被保存在应用程序运行的情况下,用户已经login,所以sesssion应该继续。 用一些blurb来帮助debugging:

 import UIKit import WebKit class ViewController: UIViewController, WKNavigationDelegate { @IBOutlet weak var html: WKWebView! override func viewDidLoad() { super.viewDidLoad() html.navigationDelegate = self retrieve_cookies() } func opensite() { let addr = "https://thesite.com/bla/bla" let url = URL(string: addr)! let request = URLRequest(url: url) html.load(request) } func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { let ds = WKWebsiteDataStore.default() let cookies = ds.httpCookieStore cookies.getAllCookies { (cookies: [HTTPCookie]) in for cookie in cookies { NSLog("Known cookie at load: \(cookie.name)") } } NSLog("Starting to load") } func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { NSLog("** Error" + error.localizedDescription) } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { NSLog("Load finished") let ds = WKWebsiteDataStore.default() let cookies = ds.httpCookieStore cookies.getAllCookies { (cookies: [HTTPCookie]) in var cookieDict = [String : AnyObject]() for cookie in cookies { NSLog("Saved cookie: \(cookie.name)") cookieDict[cookie.name] = cookie.properties as AnyObject? } UserDefaults.standard.set(cookieDict, forKey: "cookiez") } } func retrieve_cookies() { let ds = WKWebsiteDataStore.default() let cookies = ds.httpCookieStore let userDefaults = UserDefaults.standard if let cookieDict = userDefaults.dictionary(forKey: "cookiez") { NSLog("Retrieving cookies") var cookies_left = 0 for (_, cookieProperties) in cookieDict { if let _ = HTTPCookie(properties: cookieProperties as! [HTTPCookiePropertyKey : Any] ) { cookies_left += 1 } } for (_, cookieProperties) in cookieDict { if let cookie = HTTPCookie(properties: cookieProperties as! [HTTPCookiePropertyKey : Any] ) { cookies.setCookie(cookie, completionHandler: { cookies_left -= 1 NSLog("Retrieved cookie, \(cookies_left) to go") if cookies_left == 0 { self.opensite() } }) } } } else { NSLog("No saved cookies") opensite() } }