iOS-在WKWebView中使用cookie [英] iOS - Using cookies with WKWebView

查看:1047
本文介绍了iOS-在WKWebView中使用cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图像这样在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆