方法一
-
(WKWebViewConfiguration *)getWKWebViewConfigwithCookie:(NSString *)cookie{
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.preferences = [WKPreferences new];
//The minimum font size in points default is 0;
config.preferences.minimumFontSize = 0;
//是否支持JavaScript
config.preferences.javaScriptEnabled = YES;
//不通过用户交互,是否可以打开窗口
config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
//通过JS与webView内容交互WKUserContentController *userContentController = config.userContentController;
NSString *cookieSource = [NSString stringWithFormat:@"document.cookie = '%@';", cookie];
// cookieSource = [NSString stringWithFormat:@"document.cookie = 'name_test=%@,name_ww=%@';", @"Config setting",@"123"];WKUserScript *cookieScript = [[WKUserScript alloc] initWithSource:cookieSource injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
[userContentController addUserScript:cookieScript];
config.userContentController = userContentController;// config.userContentController = [WKUserContentController new];
return config;
}
方法二
pragma 手动添加cookie
-(void)addCookie{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// NSMutableString *cookieValue = [defaults objectForKey:WXCookiesKey];
NSDictionary *dictCookieValue = [defaults objectForKey:@"WXCookiesKey"];
NSMutableString *cookieValue = [NSMutableString stringWithFormat:@""];
// cookie重复,先放到字典进行去重,再进行拼接
for (NSString *key in dictCookieValue) {
NSString *appendString = [NSString stringWithFormat:@"%@=%@;", key, [dictCookieValue valueForKey:key]];
[cookieValue appendString:appendString];
}
//这个cookie是我自己的cookie换成你自己cookie的获取方法
// [self.webview evaluateJavaScript:[NSString stringWithFormat:@"function setCookie(e,o){document.cookie=e+\"=\"+escape(o)+\";path=/;domain=.xincheng.com\"}for(var cookieTem= \"\%@\",cookieArr=cookieTem.split(\";\"),i=0;i<cookieArr.length;i++){var temArr=cookieArr[i].split(\"=\");setCookie(temArr[0],temArr[1])}",cookieValue] completionHandler:nil];
[self.webview evaluateJavaScript:[NSString stringWithFormat:@"function setCookie(e,o){document.cookie=e+\"=\"+escape(o)+\";path=/;domain=.xincheng.com\"}for(var cookieTem= \"\%@\",cookieArr=cookieTem.split(\";\"),i=0;i<cookieArr.length;i++){var temArr=cookieArr[i].split(\"=\");setCookie(temArr[0],temArr[1])}",cookieValue] completionHandler:nil];
}
// 当main frame的web内容开始到达时,会回调
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation
{
// 页面加载完成之后调用需要重新给WKWebView设置Cookie防止因为a标签跳转,导致下一次跳转的时候Cookie丢失。
[self addCookie];
}
document.cookie 的方法获取 cookie并不支持跨越获取,如果设置 httponly则获取不到 cookie
不论是(1)还是(2)方法,似乎都无法解决302请求的 Cookie 问题。举例来说,假设你要访问网站A,在A中点击登录,跳转页面到B地址,在B中完成登录之后302跳转回A网站。此时cookie是存在于B地址的 response 中的,在A地址的 response 中并没有 cookie 的字段。然而我们只能获取到A地址的 response ,无法截获到B地址的response。因此获取不到该类型网站的 cookie 。
网友评论