【发布时间】:2019-03-26 12:44:16
【问题描述】:
我正在尝试像这样在我的 iOS 中设置 cookie:
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 都被打印出来,并且它们似乎设置正常。但是当我使用我的 safari 的 Web 检查器查看时,如果它们真的设置好了,那么什么都没有。没有设置 cookie。问题是什么?我需要接受它们吗? Safari 会阻止他们吗?如何正常设置它们,以便在 Web 检查器中可见?
我也试过这种方法:
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)
})
})
}
}
但它也没有用。
Cookie 未设置。
这是我在 Xcode 的控制台中看到的。
所以这里似乎已经设置好了。但事实并非如此。打印代码打印 cookie。但它们在 Safari 控制台中并非全部可见。这怎么可能? Cookie csrftoken 和 sessionid 由网站设置,而不是由我的应用程序设置。它们在打印和调试控制台中都可见。
【问题讨论】:
-
你完全错了,你在标题中设置cookie而不是httpCookieStore,你想为哪个iOS版本设置cookie,因为对于11以上的iOS,你可以使用http cookie store和iOS
-
对于 Safari,您可以通过开发选项卡检查器设置 cookie,并且在其中显示 cookie 的位置有存储选项卡。
-
为 11 以上的 iOS 开发。这正是我使用 Safari 所做的,但存储选项卡中没有 cookie。
-
不需要在header中设置cookie,在httpcookie存储中设置cookie即可。
-
像这样:stackoverflow.com/questions/52815182/… ?那是我的另一个问题:D 也不起作用。
标签: ios swift cookies uiwebview wkwebview