Cookies 在WKWebView中丢失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

当我使用身份验证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
功能缺失


提前感谢您的任何想法。

您可以向we视图中注入一些javascript来加载cookies,这样web视图发起的请求也会包含您的cookies。有关更多详细信息,请参见此问题的答案:


我想,当您在请求中设置cookie时,您是在向服务器发送cookie,而不是在WKWebview中设置cookie。Cookie通常由服务器在“set Cookie”头中设置,然后应将其持久化。因此,如果您对cookie一路传递到服务器并返回没有问题,您可以做一个技巧:

  • 在第一个请求中发送cookie
  • 使服务器将其发送回“Set Cookie”标题中
  • 每个后续请求都应该有cookie
  • 我还没有尝试过这种方法,但如果它不起作用,我会非常惊讶

    Sebastien提到的替代方法是通过javascript注入它。请注意,您不能以这种方式设置“HTTP Only”标志,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?我看不到您的问题