更改为WKWebView后在NSURLRequest上缺少一些cookie

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改为WKWebView后在NSURLRequest上缺少一些cookie相关的知识,希望对你有一定的参考价值。

我正在用UIWebView替换我们应用中的WKWebView,并且遇到了Cookie问题。我们的应用程序中有一个登录过程,其中Web表单显示在Web视图中,如果登录成功,我们将调用提供我们的身份验证令牌的服务。该服务通过Web视图中设置的会话cookie识别成功登录。使用UIWebView,我们无需执行任何操作即可将此Cookie传递给令牌请求,因为UIWebViewNSURLSession都使用共享的NSHTTPCookieStorageWKWebView但是不使用共享库克存储,因此我在调用令牌服务之前将所有cookie从其复制到共享存储:

[webView.configuration.websiteDataStore.httpCookieStore getAllCookies:^(NSArray* cookies) 
    for (NSHTTPCookie *cookie in cookies) 
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
    
];

如果我打印出共享存储中的cookie,这似乎起作用

for (NSHTTPCookie *cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) 
    NSLog(@"name: %@\tvalue: %@", cookie.name, cookie.value);

我明白了:

name: mobile                                            value: 220|220
name: BDJSESSIONID                                      value: 0000YHfKy0d8aGHsOKPZBFznsQt:bdaix570
name: vp                                                value: ourdomain-com
name: ukontrol                                          value: nb8sfm1:1590215000215:
name: ACENBP                                            value: ffffffffc3a01a5945525d5f4f58455e445a4a423660
name: clientsession                                     value: NaN
name: _ga                                               value: GA1.2.2108673536.1590134296
name: _gid                                              value: GA1.2.570415333.1590134296
name: xLocale                                           value: da:DK
name: _gat_UA-56861410-1                                value: 1
name: PD_STATEFUL_c57e342c-fccf-4a0c-bb38-de5e09832f2c  value: %2Fcardapp.services
name: PD_STATEFUL_00819ac9-1bb8-4375-80ff-00c0285bab51  value: %2Fcardapp.services

这看上去与我使用UIWebView时完全相同。BDJSESSIONIDcookie在这里很重要。如果我错过了,则对令牌服务的调用将创建一个新会话,用户未登录。

我现在的问题是,当我像这样调用令牌服务时,某些cookie(包括BDJSESSIONID)丢失了:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLSessionTask *sessionTask = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) 
    ...
];
[sessionTask resume];

这些是实际发送的cookie:

enter image description here

我应该注意,调用令牌服务的代码与使用UIWebView时相比没有发生变化。

我正在用WKWebView替换我们应用程序中的UIWebView,并且遇到了Cookie问题。我们的应用程序中有一个登录过程,其中一个Web表单显示在Web视图中,并且如果登录...

答案

HTTPCookieStorage文档说明了以下几点:

以上是关于更改为WKWebView后在NSURLRequest上缺少一些cookie的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView 和动态类型 + 自定义字体

在 WKWebView 中更改完成按钮的颜色

iOS WKWebview:始终允许相机权限

WKWebview 位置固定移动 - 科尔多瓦应用

iOS WKWebview如何检测我何时点击<a>标签内的图像

在用户登录后将按钮更改为可见