WKWebView cookie问题

方法一

  • (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

}

// 当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 。

你可能感兴趣的:(WKWebView cookie问题)