我正在将应用从UIWebView
转换为WKWebView
,并且有一个自动登录功能,该功能是通过将用户经过身份验证的信息保存到NSHTTPCookieStorage
来处理的。但是WKWebView
似乎没有查看cookie的这个位置,因此每次都会提示用户登录屏幕。
是否需要激活WKWebView正确使用cookie?
答案 0 :(得分:6)
目前,由于没有共享相同的cookie存储空间,WKWebView和UIWebView无法正常协同工作。以下回答深入讨论。 How can I retrieve a file using WKWebView?
让我们希望Apple在upcomming update中解决这个问题。
答案 1 :(得分:2)
您可以阅读NSHTTPCookieStorage中的所有Cookie,并使用WKHTTPCookieStore(在iOS 11中引入)将这些Cookie设置为WKWebview。有关WKWebview的更多信息:https://developer.apple.com/videos/play/wwdc2017/220/
如果您想支持早期版本,请参阅此答案。 Can I set the cookies to be used by a WKWebView?
// get the cookie store (WKHTTPCookieStore) from the webview
let cookieStore =webview.configuration.websiteDataStore.httpCookieStore
//create a cookie
let cookie = HTTPCookie(properties: [ HTTPCookiePropertyKey.domain: "canineschool.org", HTTPCookiePropertyKey.path: "/",HTTPCookiePropertyKey.secure: true,HTTPCookiePropertyKey.name: "ssoToken", HTTPCookiePropertyKey.value: "******"])
// set the cookie to cookieStore
cookieStore.setCookie(cookie!){
//load the request.
}
重要说明:setCookie是异步请求。完成处理程序将是 设置cookie后调用。 https://developer.apple.com/documentation/webkit/wkhttpcookiestore/2882007-setcookie
答案 2 :(得分:1)
将通过本机代码(使用NSURLConnection / NSURlsession)获得的cookie共享到UIWebview是通过将cookie保存到NSHTTPCookieStorage来完成的,并且UIwebview将这些cookie用于所有网络请求。然而,这种技术并不适用于WKwebview。
然而,我们可以将本地代码中的cookie共享到WKWebview,如下所示:
在加载NSURLRequest时,我们可以在URLRequest中加载cookie作为标头,然后使用WKwebview加载请求。
如果您希望WKWebview的所有后续AJAX调用也使用此cookie,您可能希望在加载URLRequest时将这些cookie注入WKWebview。这将在下面的答案中详细解释。 Can I set the cookies to be used by a WKWebView?
答案 3 :(得分:-5)
let webConfiguration = WKWebViewConfiguration()
webConfiguration.processPool = webProcessPool!
使用WKWebView
初始化每个WKWebViewConfiguration
,可能会让您大吃一惊!
let webview = WKWebView(frame:rect, configuration:webConfiguration)