Cookies 在WKWebView中丢失Cookie
当我使用身份验证cookie为Cookies 在WKWebView中丢失Cookie,cookies,nsmutableurlrequest,wkwebview,Cookies,Nsmutableurlrequest,Wkwebview,当我使用身份验证cookie为WKWebView创建新请求并发送请求时,WKWebView正确加载受保护的网页: let req = NSMutableURLRequest(URL: NSURL(string: urlPath)!) let headers = NSHTTPCookie.requestHeaderFieldsWithCookies([myAuthCookie]); req.allHTTPHeaderFields = headers; webView.loadRequest(req
WKWebView
创建新请求并发送请求时,WKWebView
正确加载受保护的网页:
let req = NSMutableURLRequest(URL: NSURL(string: urlPath)!)
let headers = NSHTTPCookie.requestHeaderFieldsWithCookies([myAuthCookie]);
req.allHTTPHeaderFields = headers;
webView.loadRequest(req)
问题是,当用户单击网页中的任意链接时,新请求WKWebView
会丢失身份验证cookie并重定向到登录页面。Cookie域和路径已填充且正确
我知道前面提到的WKWebView
功能缺失
提前感谢您的任何想法。您可以向we视图中注入一些javascript来加载cookies,这样web视图发起的请求也会包含您的cookies。有关更多详细信息,请参见此问题的答案:
我想,当您在请求中设置cookie时,您是在向服务器发送cookie,而不是在WKWebview中设置cookie。Cookie通常由服务器在“set Cookie”头中设置,然后应将其持久化。因此,如果您对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];
}
它从共享cookies中提取正确的cookies,并将其包含到您的请求中我已经为这个问题挣扎了好几天了。在WKWebView中cookie的存储/使用会如此混乱,这似乎令人困惑。期待着听到任何解决方案。可能是Hi alex的复制品,你知道这里有什么变化吗?在WKWebView中处理Cookie是否更好?嗨,JLaw,看看这里我认为他们提供了在iOS9中处理Cookie的好方法,尽管我自己还没有尝试过。这很好,正是我的Node.js定制服务器所需要的。真不敢相信我居然没想到。我在对饼干摄取过程进行反向建模。当然,服务器需要发送Set Cookie以使WKWebView将其集成回其内部(不透明!?!Argh)Cookie存储。当WKWebView将其包含在loadRequest中时,它是一个任意发送的标头。默认情况下,web服务器认为无需回显“Set Cookie”-它正确地假设浏览器已经有了它。WKWebViews的loadRequest返回WKNavigation*,而不是void:[您评论道:“然后每次要加载请求时,调用此函数:
-(**void**)loadRequest:(NSURLRequest\*)request
”.WKWebView的loadRequest返回**WKNavigation***而不是**void**。您编写的内容与UIWebview完美结合,但开头的问题提到了WKWebView。实际上,它是有效的(我在UIWebview/WKWebView的包装中使用它)。它加载了请求,但我们只是不使用结果。我需要帮助@TheWindwaker?我看不到您的问题