场景
例如,这是一些 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;
}
}
记录一下困扰自己好几天的问题
网友评论