WKWebView Cookies
WKWebView Cookies
我正在使用下面提到的方法在 WKWebview
中设置 cookie:
Can I set the cookies to be used by a WKWebView?
但是我设置的 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
是一种 returns cookie 值作为 NSString
的方法
WKWebView
是否会将 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 存储中有多个 cookie 的域(或路径)与请求的 URL 匹配,则发送多个 Cookie。
在编写 getCookieString
方法时,您可能更改或添加了字符串的 domain=
部分。这将导致第二个有效的 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;
}
我正在使用下面提到的方法在 WKWebview
中设置 cookie:
Can I set the cookies to be used by a WKWebView?
但是我设置的 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
是一种 returns cookie 值作为 NSString
WKWebView
是否会将 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 存储中有多个 cookie 的域(或路径)与请求的 URL 匹配,则发送多个 Cookie。
在编写 getCookieString
方法时,您可能更改或添加了字符串的 domain=
部分。这将导致第二个有效的 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;
}