Я пытаюсь установить файлы cookie в моей iOS следующим образом:
let url = URL(string: "url")!
let jar = HTTPCookieStorage.shared
let cookieHeaderField = ["Set-Cookie": "key1=value1, key2=value2"]
let cookies = HTTPCookie.cookies(withResponseHeaderFields: cookieHeaderField, for: url)
jar.setCookies(cookies, for: url, mainDocumentURL: url)
let request = URLRequest(url: url)
viewerWebKit.load(request)
Затем я печатаю их так:
viewerWebKit.configuration.websiteDataStore.httpCookieStore.getAllCookies( { (cookies) in
cookies.forEach({ (cookie) in
print(cookie.name)
})
})
Все файлы cookie печатаются и кажутсяустановить нормально.Но когда я использую веб-инспектор моего сафари, чтобы увидеть, действительно ли они установлены, тогда ничего не происходит.Файлы cookie не установлены.В чем проблема?Нужно ли их принимать?Сафари блокирует их?Как я могу установить их нормально, чтобы они были видны в веб-инспекторе?
Я также попробовал этот подход:
import UIKit
import WebKit
class ViewWrapper: UIViewController, WKNavigationDelegate {
var loginToken: String?
@IBOutlet weak var viewerWebKit: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
var urlRequest = URLRequest(url: URL(string: "url")!)
urlRequest.httpShouldHandleCookies = true
let newcookie = HTTPCookie(properties: [
.domain: "domain",
.path: "",
.name: "key",
.value: "value",
.secure: "FALSE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])
viewerWebKit.configuration.websiteDataStore.httpCookieStore.setCookie(newcookie!, completionHandler: {
self.viewerWebKit.load(urlRequest)
})
viewerWebKit.configuration.websiteDataStore.httpCookieStore.getAllCookies( { (cookies) in
cookies.forEach({ (cookie) in
print(cookie.name)
})
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func loadView() {
viewerWebKit = WKWebView()
viewerWebKit.navigationDelegate = self
view = viewerWebKit
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
title = webView.title
}
func cookiesDidChange(in cookieStore: WKHTTPCookieStore) {
cookieStore.getAllCookies({ (cookies) in
cookies.forEach({ (cookie) in
print(cookie.name)
})
})
}
}
, но он тоже не работал.
Вот что я вижу в консоли отладки safari:
Файлы cookie не установлены.
Это то, что я вижу в консоли Xcode,
Так что здесь, кажется, установлено.Но это не на самом деле.Печать кода печатает куки.Но они не все видны в консоли сафари.Как это возможно?Файлы cookie csrftoken и sessionid устанавливаются веб-сайтом, а не моим приложением.И они видны как на печатной, так и на отладочной консоли.