iOS-在WKWebView中使用cookie [英] iOS - Using cookies with WKWebView
问题描述
我试图像这样在iOS WKWebView中使用cookie:
I am trying to use cookies in iOS WKWebView like this:
import UIKit
import WebKit
class ViewWrapper: UIViewController, WKNavigationDelegate{
@IBOutlet weak var viewerWebKit: WKWebView!
var loginToken: String?
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "url")!
let newcookie = HTTPCookie(properties: [
.domain: "domain",
.path: "/",
.name: "cookie name",
.value: "cookie value",
.secure: "FALSE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])
var request = URLRequest(url: url)
request.httpShouldHandleCookies = true
viewerWebKit.configuration.websiteDataStore.httpCookieStore.setCookie(newcookie!, completionHandler: {
print("cookie setup done")
self.viewerWebKit.load(request)
})
let refresh = UIBarButtonItem(barButtonSystemItem: .refresh, target: webView, action: #selector(viewerWebKit.reload))
toolbarItems = [refresh]
navigationController?.isToolbarHidden = false
}
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
}
}
域,路径,名称和值100%正确。但是,当我尝试获取它们并在我的网站上进行打印时,没有设置cookie。网站打印cookie效果很好,因为我为此做了一个android应用程序,并且在那里效果很好。
Domain, path, name and value are 100% correct. But when I am trying to get them and print then on my website, no cookies are set. Website printing of cookies works well, because I did an android app for this and it worked well there.
我需要做更多的事情来接受或存储cookie吗?
Do I need to do something more to accept or store the cookies?
推荐答案
以这种方式设置Cookie,并通过安全标志 FALSE和 path 并使用 /
Set cookie this way, and pass secure flag "FALSE" and path with "/"
let newcookie = HTTPCookie(properties: [
.domain: "domain",
.path: "/",
.name: "cookie name",
.value: "cookie value",
.secure: "FALSE",
.expires: NSDate(timeIntervalSinceNow: 31556926)
])
设置cookie并等待完成块加载页面。
Set cookie and wait for completion block to load your page.
self.configuration.websiteDataStore.httpCookieStore.setCookie(headerCookie, completionHandler: {
print("cookie setup done")
viewerWebKit.load(URLRequest(url: url))
})
想要查看Cookie后是否更新过,而不仅仅是像这样添加cookie更改值观察器。
After want to see cookie are updated or not just Add cookie change value observer like this way.
WKWebsiteDataStore.default().httpCookieStore.add(self)
func cookiesDidChange(in cookieStore: WKHTTPCookieStore) {
cookieStore.getAllCookies({ (cookies) in
cookies.forEach({ (cookie) in
print(cookie.name)
})
})
}
现在您可以在 cookiesDidChange中看到您的cookie 方法。
这篇关于iOS-在WKWebView中使用cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!