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
返回的方法
-
NSHTTPCookieStorage
在运行时将Cookie设置回NSHTTPCookieStorage
(在AJAX调用期间) - 我可以使用任何委托方法控制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; }