当我使用身份验证Cookie创建WKWebView
的新请求并发送请求时,WKWebView
正确加载受保护的网页:
let req = NSMutableURLRequest(URL: NSURL(string: urlPath)!)
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies([myAuthCookie]);
req.allHTTPHeaderFields = headers;
webView.loadRequest(req)
问题是,当用户点击网页中的任何链接时,新请求WKWebView
会丢失身份验证Cookie并重定向到登录页面。 Cookie域和路径已填写且正确无误。
我知道提到的WKWebView
{{1}}缺少功能。
提前感谢任何想法。
答案 0 :(得分:6)
最好的办法是将您的cookie存储到
中[NSHTTPCookieStorage sharedHTTPCookieStorage]
然后,每次要加载请求时,请改为调用此函数:
- (void)loadRequest:(NSURLRequest *)request {
if (request.URL) {
NSDictionary *cookies = [NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:request.URL]];
if ([cookies objectForKey:@"Cookie"]) {
NSMutableURLRequest *mutableRequest = request.mutableCopy;
[mutableRequest addValue:cookies[@"Cookie"] forHTTPHeaderField:@"Cookie"];
request = mutableRequest;
}
}
[_wkWebView loadRequest:request];
}
它从共享Cookie中提取正确的Cookie并将其包含在您的请求中
答案 1 :(得分:2)
我想当你在请求中设置它时,你将cookie发送到服务器但不在WKWebview中设置它。 Cookie通常由服务器在“Set-Cookie”标头中设置,然后应该保留。因此,如果您没有将cookie一直传递到服务器并返回的问题,那么您可以做一个技巧:
我还没有尝试过这种方法,但如果它不起作用将会非常惊讶。
Sebastien提到的替代品可以通过javascript注入它。请注意,您不能以这种方式设置“HTTP-Only”标记,并且所有运行的脚本(https://www.owasp.org/index.php/HttpOnly)都可以使用cookie。
我仍在尝试找到一种自然的方法来设置cookie,但我认为它不存在。
希望它有所帮助。
答案 2 :(得分:0)
您可以在我们的视图中注入一些javascript来加载Cookie,以便网络视图发起的请求也会包含您的Cookie。有关详细信息,请参阅此问题的答案: