在 iOS 缺少“会话 cookie”时使用了 React Native WebView
On iOS missing `session cookies` used React Native WebView
错误描述:
我的 WebView 应该显示一个具有 cookie 身份验证的网页。该页面需要一个在登录时获取的会话 ID cookie。为了进行身份验证,我使用 fetch() 将登录请求发送到网站。
登录成功后,我可以看到收到了正确的 cookie。成功后,我将启动 WebView。
它在 Android 上完美运行,但在 iOS 上运行不佳。
我在 iOS 9 和 iOS 11 模拟器以及 iOS 11 设备上测试了它。
总结一下这个问题:为什么只有 iOS 时我通过提取获得的 cookie 没有传递到 WebView。
<WebView
source = {{
uri: url,
}}
onLoadEnd={() => {
CookieManager.getAll().then((cookies) => {
console.log('CookieManager.getAll =>', cookies);
});
}}
/>
enter image description here
环境:
- OS: IOS
- OS版本:14.4.2
- react-native 版本:0.64
- react-native-webview 版本:^11.4.3
我使用 getAllCookies
从 wkwebview 获取 cookie,例如 this。
if (@available(iOS 11.0, *)) {
[webView.configuration.websiteDataStore.httpCookieStore
getAllCookies:^(NSArray<NSHTTPCookie *> *_Nonnull cookies) {
NSURLRequest *request =
[[NSURLRequest alloc] initWithURL:self.URL]; //your URL
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session
dataTaskWithRequest:request
completionHandler:^(NSData *responseData, NSURLResponse *response,
NSError *error) {
//Do Something
}];
[task resume];
[session.configuration.HTTPCookieStorage storeCookies:cookies forTask:task];
}];
}
错误描述: 我的 WebView 应该显示一个具有 cookie 身份验证的网页。该页面需要一个在登录时获取的会话 ID cookie。为了进行身份验证,我使用 fetch() 将登录请求发送到网站。
登录成功后,我可以看到收到了正确的 cookie。成功后,我将启动 WebView。
它在 Android 上完美运行,但在 iOS 上运行不佳。
我在 iOS 9 和 iOS 11 模拟器以及 iOS 11 设备上测试了它。
总结一下这个问题:为什么只有 iOS 时我通过提取获得的 cookie 没有传递到 WebView。
<WebView
source = {{
uri: url,
}}
onLoadEnd={() => {
CookieManager.getAll().then((cookies) => {
console.log('CookieManager.getAll =>', cookies);
});
}}
/>
enter image description here
环境:
- OS: IOS
- OS版本:14.4.2
- react-native 版本:0.64
- react-native-webview 版本:^11.4.3
我使用 getAllCookies
从 wkwebview 获取 cookie,例如 this。
if (@available(iOS 11.0, *)) {
[webView.configuration.websiteDataStore.httpCookieStore
getAllCookies:^(NSArray<NSHTTPCookie *> *_Nonnull cookies) {
NSURLRequest *request =
[[NSURLRequest alloc] initWithURL:self.URL]; //your URL
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session
dataTaskWithRequest:request
completionHandler:^(NSData *responseData, NSURLResponse *response,
NSError *error) {
//Do Something
}];
[task resume];
[session.configuration.HTTPCookieStorage storeCookies:cookies forTask:task];
}];
}