WKWebViewcookies

我使用下面提到的方法在WKWebview设置cookie: 我可以设置WKWebView使用的cookie吗?

但是我设置的cookie在AJAX调用中被复制。 我的意思是他们被重复了两次。

这是我使用的代码片段:

 NSString *strURL = DASHBOARDURL; NSURL *url = [NSURL URLWithString:strURL]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:url]; NSMutableString *script = [[NSMutableString alloc] init]; NSMutableString *cookieString = [[NSMutableString alloc] init]; for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { [script appendString:[NSString stringWithFormat:@"document.cookie='%@';",cookie.getCookieString]]; [cookieString appendString:[NSString stringWithFormat:@"%@;", cookie.getCookieString]]; } [request setValue:cookieString forHTTPHeaderField:@"Cookie"]; //cookies for further AJAX calls WKUserContentController *userContentController = [[WKUserContentController alloc] init]; WKUserScript *cookieInScript = [[WKUserScript alloc] initWithSource:script injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; [userContentController addUserScript:cookieInScript]; WKWebViewConfiguration *webViewConfig = [[WKWebViewConfiguration alloc] init]; webViewConfig.userContentController = userContentController; CGRect viewRect = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); wkWebview = [[WKWebView alloc] initWithFrame:viewRect configuration:webViewConfig]; wkWebview.navigationDelegate = self; [wkWebview loadRequest:request]; [self.view addSubview:wkWebview]; 

getCookieString是一个将cookie值作为NSString返回的方法

  1. NSHTTPCookieStorage在运行时将Cookie设置回NSHTTPCookieStorage (在AJAX调用期间)
  2. 我可以使用任何委托方法控制AJAX调用cookie吗?

以下是我的getCookieString类( NSHTTPCookie (CookieObject) )方法

 - (NSString *)getCookieString { NSString *string = [NSString stringWithFormat:@"%@=%@;domain=%@;expiresDate=%@;path=%@;sessionOnly=%@;isSecure=%@", self.name, self.value, self.domain, self.expiresDate, self.path ?: @"/", self.isSecure ? @"TRUE":@"FALSE", self.sessionOnly ? @"TRUE":@"FALSE"]; return string; } 

如果Cookie存储区中的域(或path)与请求的URL匹配的Cookie不止一个,则会发送多个Cookie。

在编写getCookieString方法时,您可能已经更改或添加了domain=部分string。 这将导致第二个有效的cookie被存储并因此与您的请求一起发送。

从我的getCookieString方法中删除domain=解决了这个问题

 -(NSString *)getCookieString { NSString *string = [NSString stringWithFormat:@"%@=%@;expiresDate=%@;path=%@;sessionOnly=%@;isSecure=%@", self.name, self.value, self.expiresDate, self.path ?: @"/", self.isSecure ? @"TRUE":@"FALSE", self.sessionOnly ? @"TRUE":@"FALSE"]; return string; }