WKWebView cookie存储位置

时间:2015-01-19 15:31:36

标签: ios objective-c wkwebview

我正在将应用从UIWebView转换为WKWebView,并且有一个自动登录功能,该功能是通过将用户经过身份验证的信息保存到NSHTTPCookieStorage来处理的。但是WKWebView似乎没有查看cookie的这个位置,因此每次都会提示用户登录屏幕。

是否需要激活WKWebView正确使用cookie?

4 个答案:

答案 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)