我正在替换UIWebView
我们的应用程序,WKWebView
但遇到了 cookie 问题。我们的应用程序中有一个登录过程,其中 Web 表单显示在 Web 视图中,如果登录成功,我们将调用一个服务来为我们提供身份验证令牌。该服务通过在 Web 视图中设置的会话 cookie 识别成功登录。UIWebView
我们不需要做任何事情来将此 cookie 传递给令牌请求,因为两者UIWebView
都使用NSURLSession
shared NSHTTPCookieStorage
。WKWebView
但是不使用共享的 cookie 存储,所以我在调用令牌服务之前将所有 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
. BDJSESSIONID
cookie 是这里重要的一个。如果我错过了,对令牌服务的调用将创建一个用户未登录的新会话。
我现在的问题是,当我像这样调用令牌服务时,一些 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:
我应该注意到,调用令牌服务的代码与我们使用UIWebView
.