UIWebViewとWKWebViewはCookieを設定します



Uiwebview Wkwebview Set Cookies



1つ目はUIWebViewの設定Cookieです。

- (void)setCookie{ NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary] / / The point to note here is that you must add the NSHTTPCookieDomain and NSHTTPCookiePath to the host and path of the URL to be loaded, otherwise the cookie will be unsuccessful, indispensable [cookieProperties setObject:[self.url host] forKey:NSHTTPCookieDomain] [cookieProperties setObject:[self.url path] forKey:NSHTTPCookiePath] [cookieProperties setObject:@'useId' forKey:NSHTTPCookieName] [cookieProperties setObject:@'holdfun' forKey:NSHTTPCookieValue] NSHTTPCookie *cookieuser = [NSHTTPCookie cookieWithProperties:cookieProperties] [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieuser] [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways] NSURLRequest *request = [NSURLRequest requestWithURL:self.url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60] }

クッキーを削除する



- (void)deleteCookie{ NSHTTPCookie *cookie NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage] NSArray *cookieAry = [cookieJar cookiesForURL: self.url] for (cookie in cookieAry) { [cookieJar deleteCookie: cookie] } }

UIWebViewは上記のようにCookieを設定するように設定でき、H5側も取得できますが、WKWebViewは機能せず、WKWebViewインスタンスはCookieをアプリの標準Cookieコンテナー(NSHTTPCookieStorage)に保存しません。
NSURLSession / NSURLConnectionおよびその他のネットワーク要求はNSHTTPCookieStorageを使用してCookieにアクセスするため、WKWebViewのCookieにアクセスすることはできません。この現象は、WKWebViewがCookieを保存し、NSURLSession / NSURLConnectionなどの他のネットワーククラスが表示されないことです。 NSHTTPCookieStorageは、Cookieを管理するための単純な実装です。各Cookieは、NSHTTPCookieクラスのインスタンスです。原則として、Cookieはすべてのアプリケーション間で共有され、異なるプロセス間で同期されます。 Cookieと同じ状況は、WKWebViewのキャッシュ、資格情報などです。 WKWebViewには独自のプライベートストレージがあるため、標準のcocoaネットワーククラスとの互換性はあまり良くありません。 jsインジェクションメソッドを使用してUIWebViewCookieを設定する必要があります。コードを見てみましょう。

-(void)loadWKWebView { self.url = [NSURL URLWithString:@'http://edu.holdfun.cn/news/'] NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary] [cookieProperties setObject:@'edu.holdfun.cn' forKey:NSHTTPCookieDomain] [cookieProperties setObject:@'/news' forKey:NSHTTPCookiePath] [cookieProperties setObject:@'useId' forKey:NSHTTPCookieName] [cookieProperties setObject:@'holdfun' forKey:NSHTTPCookieValue] NSHTTPCookie *cookieuser = [NSHTTPCookie cookieWithProperties:cookieProperties] [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieuser] [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways] NSURLRequest *request = [NSURLRequest requestWithURL:self.url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60] NSString *cookieStr = [self setJSCookie] WKUserScript *cookieScipt = [[WKUserScript alloc] initWithSource:cookieStr injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO] WKUserContentController *wku = [[WKUserContentController alloc] init] [wku addUserScript:cookieScipt] WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init] wkWebConfig.userContentController = wku WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:wkWebConfig] [webView loadRequest:request] [self.view addSubview:webView] webView.UIDelegate = self webView.navigationDelegate = self } -(NSString *)setJSCookie{ NSData * cookieData = [[NSUserDefaults standardUserDefaults]objectForKey:@'cookieData'] NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookieData] for (NSHTTPCookie *cookie in cookies) { [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie] } NSMutableDictionary *cookieDic = [NSMutableDictionary dictionary] NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage] for (NSHTTPCookie *cookie in [cookieJar cookies]) { [cookieDic setObject:cookie.value forKey:cookie.name] } NSString *cookieStr = @'' //This can filter the cookie injection you want, or you can delete all the injections. for (NSString *key in cookieDic) { if ([key isEqualToString:@'useId']) { NSString *appendString = [NSString stringWithFormat:@''%@=%@path=/'',key,[cookieDic valueForKey:key]] cookieStr = [NSString stringWithFormat:@'%@document.cookie=%@',cookieStr,appendString] } } return cookieStr }