如何在iOS中的共享首選項中保存cookie? 我以後如何提取它? 我想從HTTPCookieStorage.shared.cookies到用戶默認保存Cookie,並再後來 提取請回答斯威夫特3如何在iOS中的共享首選項中保存cookie?
2
A
回答
4
試試這個代碼:
商店:
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)
}
}
}
}
0
我的解決方案使用Swift 4,WKWebView & iOS 11.在服務器推送的PHPSESSID沒有跨應用程序運行保存的情況下工作,用戶已經登錄,因此sesssion應該繼續。用一些blurb來幫助調試:
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()
}
}
相關問題
- 1. 如何在共享首選項中保存json響應的值?
- 2. 如何在共享首選項中保存縮放位圖?
- 3. 如何在共享首選項中保存圖像?
- 4. 保存int的共享首選項?
- 5. 如何將共享首選項中的textView保存?
- 6. 共享首選項保存Textview背景
- 7. 保存意向共享首選項
- 8. EditText中的文本未保存在共享首選項中
- 9. 複選框值在android中保存共享首選項?
- 10. 共享首選項存儲
- 11. 如何使用共享首選項在android中保存editText中的數據
- 12. 將自定義數組保存在共享首選項中
- 13. 在共享首選項中保存R ID
- 14. 在共享首選項中保存評級條評級
- 15. 在Android遊戲中保存高分 - 共享首選項
- 16. 在共享首選項中保存用戶ID Android
- 17. 從共享首選項列表中保存複選框狀態
- 18. 如何將OAuth2的憑證存儲在共享首選項中
- 19. 共享首選項
- 20. 共享首選項
- 21. 共享首選項
- 22. Android如何在共享首選項中存儲spanned文本
- 23. 如何在共享首選項中存儲數據
- 24. 如何在共享首選項中存儲頂級高分
- 25. 如何使用共享首選項來保存名稱
- 26. 如何使用共享首選項編輯器保存
- 27. 如何將HashMap保存到共享首選項?
- 28. 如何使用共享首選項保存位置Android?
- 29. 如何使用共享首選項保存警告對話框
- 30. 如何將Spinner保存爲共享首選項?
謝謝。有效!!! – Gaurav
燦爛的,可怕的! – Starwave