如何从 WKwebview 获取 cookie (IOS)
How to get cookie from WKwebview (IOS)
我想通过 WKwebview 接收包含登录状态的 cookie。
我最终想要的是接收 cookie 数据,解析它们,然后更改登录用户的视图。
我已经厌倦了:
webview.evaluateJavascript("document.cookie.search('LoginSession=Y')") { (数据,错误) -> .....
}
结果:如果数据为'data >= 1',登录状态(IOS应用程序中的一个变量)= true,但在0(数据<0)下,登录状态将为false。
对于我的应用来说,它似乎 很有魅力。
然而,这种方式看起来非常物理和简单,所以我认为,它对某些用户来说可能不安全,并且它可能无法保证在 IOS 的所有环境中都能完美工作。
Q1:这样不危险吗?
Q2 : 我听说IOS不像其他平台那样将cookies存储在Memory中,我们可以通过一些代码设法从Memory中加载cookie数据。是否有任何推荐的库供开发人员处理来自 WKWEB 的 cookie?
由宋思雨提供 Answer
您可以访问 WKNavigationDelegate
上定义的 - webView:decidePolicyForNavigationResponse:decisionHandler:
方法中的 NSHTTPURLResponse
object。您稍后可以从 HTTP header:
中手动提取 cookie
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@""]];
for (NSHTTPCookie *cookie in newCookies) {
// Do something with the cookie
}
decisionHandler(WKNavigationResponsePolicyAllow);
}
如果你有更好的解决方案,请post你的解决方案。
我试过了。 Javascript returns 一个包含所有 cookie 的字符串 "key=value;"
我不知道它有多稳定。希望对你有帮助。
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
[webView evaluateJavaScript:@"document.cookie;" completionHandler:^(NSString *result, NSError *error)
{
NSLog(@"Error getting cookies: %@",error);
[self updateCookies:result];
}];
}
我想通过 WKwebview 接收包含登录状态的 cookie。
我最终想要的是接收 cookie 数据,解析它们,然后更改登录用户的视图。
我已经厌倦了: webview.evaluateJavascript("document.cookie.search('LoginSession=Y')") { (数据,错误) -> ..... }
结果:如果数据为'data >= 1',登录状态(IOS应用程序中的一个变量)= true,但在0(数据<0)下,登录状态将为false。
对于我的应用来说,它似乎 很有魅力。
然而,这种方式看起来非常物理和简单,所以我认为,它对某些用户来说可能不安全,并且它可能无法保证在 IOS 的所有环境中都能完美工作。
Q1:这样不危险吗?
Q2 : 我听说IOS不像其他平台那样将cookies存储在Memory中,我们可以通过一些代码设法从Memory中加载cookie数据。是否有任何推荐的库供开发人员处理来自 WKWEB 的 cookie?
由宋思雨提供 Answer
您可以访问 WKNavigationDelegate
上定义的 - webView:decidePolicyForNavigationResponse:decisionHandler:
方法中的 NSHTTPURLResponse
object。您稍后可以从 HTTP header:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@""]];
for (NSHTTPCookie *cookie in newCookies) {
// Do something with the cookie
}
decisionHandler(WKNavigationResponsePolicyAllow);
}
如果你有更好的解决方案,请post你的解决方案。
我试过了。 Javascript returns 一个包含所有 cookie 的字符串 "key=value;" 我不知道它有多稳定。希望对你有帮助。
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
[webView evaluateJavaScript:@"document.cookie;" completionHandler:^(NSString *result, NSError *error)
{
NSLog(@"Error getting cookies: %@",error);
[self updateCookies:result];
}];
}