多次重定向时 WKWebview 丢失 cookie

场景

例如,这是一些 Web 客户端请求链:

从开始请求,例如 https://xxxx/a
状态码 302,重定向到第 2 步 url
例如 https://xxxx/b
这个请求会有一个像 token=token_1 这样的 cookie
状态码 302 和响应 cookie(如一些请求令牌 token_1),重定向到第 3 步 url
一些身份验证请求,例如 https://***/auth
而iOS客户端(使用WKWebView)将从步骤2的响应中丢失cookie

尝试了cookie 同步也无法解决
使用以下方法也无法解决问题

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSString * reqUrl = navigationAction.request.URL.absoluteString;
    if ([reqUrl containsString:@"重定向地址"] && !_is_loadRequest) {
      NSMutableURLRequest *request = navigationAction.request.mutableCopy;
       [request setValue:@"sid=12343" forHTTPHeaderField:@"cookie"];
       [webView loadRequest:request];
        decisionHandler(WKNavigationActionPolicyCancel);
       return;
    } 
}

最终解决方法

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSString * reqUrl = navigationAction.request.URL.absoluteString;
    if ([reqUrl containsString:@"重定向地址"] && !_is_loadRequest) {
    //注意使用navigationAction.request.mutableCopy 依然出现cookie 丢失问题
     // NSMutableURLRequest *request = navigationAction.request.mutableCopy;
    //重新创建一个新的请求,解决我了我的问题
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];
       [webView loadRequest:request];
        decisionHandler(WKNavigationActionPolicyCancel);
       return;
    } 
}

记录一下困扰自己好几天的问题

你可能感兴趣的:(多次重定向时 WKWebview 丢失 cookie)