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

问题描述 投票:0回答:1

我正在用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视图中,并且如果登录...

ios wkwebview nsurlsession nsurlrequest nshttpcookie
1个回答
0
投票

HTTPCookieStorage文档说明了以下几点:

© www.soinside.com 2019 - 2024. All rights reserved.