ios - UIWebView 和 WKWebView 中的 cookie 是如何管理的?
问题描述
我正在从 UIWebView 迁移到 WKWebView 并面临 cookie 管理问题。由于应用程序需要支持 iOS 10,我没有通过 WKHTTPCookieStore 添加 cookie,而是遵循以下代码:
- (void)loadURL:(NSString *)url
{
NSMutableURLRequest * req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* cookies = [storage cookiesForURL:[NSURL URLWithString:url]];
NSMutableString *cookieStr = [NSMutableString string];
for (NSHTTPCookie *cookie in cookies) {
if (cookieStr.length) {
[cookieStr appendString:@"; "];
}
[cookieStr appendFormat:@"%@=%@", cookie.name, cookie.value];
}
NSLog(@"Cookie: %@",cookieStr);
[req addValue:cookieStr forHTTPHeaderField:@"Cookie"];
NSMutableString *cookieStrAfterDocLoad = [NSMutableString string];
for (NSHTTPCookie *cookie in cookies) {
[cookieStrAfterDocLoad appendFormat:@"document.cookie = '%@=%@';", cookie.name, cookie.value];
}
WKUserScript *userScript = [[WKUserScript alloc] initWithSource: cookieStrAfterDocLoad
injectionTime: WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly:NO];
[self.wkWebView.configuration.userContentController addUserScript:userScript];
[self.wkWebView loadRequest:req];
}
我需要在文档加载后添加 cookie 以维护内部导航会话。这不是正确的方法,因为可能会在页面加载时添加新的 cookie 或修改旧的 cookie。这需要在许多其他控制器中完成。
我的问题是如何知道是否在 UIWebview 中为 loadRequst 添加了 cookie,或者是否有任何其他正确的方法可以在 WKWebview 中处理这种情况,因为某些网页加载可能不需要 cookie?这是为每个 loadRequest 添加 cookie 的正确方法吗?
解决方案
推荐阅读
- javascript - 如何创建多层手风琴菜单?
- python - 将相同的标签元素添加到元素
- mongodb - 使用密码从 pyspark 连接到 mongodb 时出错
- python - 检测pygame中文本框和圆圈之间的碰撞
- json - 显示两个 json 行
- formatting - 克隆的雪花表,为什么每一列都用引号引起来?
- django - Django Rest Framework:如何使用相关名称填充 ForiegnKey 字段?
- python - 如何将此 tkinter 标签和字符串组合到一个窗口中?
- c# - 如何在 Controller 中使用 Moq 模拟 HttpContext.Current.Request.Form
- ssl - Glassfish SSL 已安装并可以正常工作,但重新启动时失败