ios - React Native WebView 在 iOS 上缺少 session cookie

标签 ios react-native cookies uiwebview

我的 WebView 应该显示一个具有 cookie 身份验证的网页。 该页面需要一个在登录时获取的 session ID cookie。 为了进行身份验证,我使用 fetch() 将登录请求发送到网站。

登录成功后,我可以看到收到了正确的 cookie。 成功后,我将启动 WebView。

它在 Android 上完美运行,但在 iOS 上运行不佳。

昨天我尝试了很多在 SO 上建议的不同方法,比如使用 react-native-cookies 手动获取 cookie,但没有任何帮助。

下面是一个示例组件,其功能与我的应用相同。我认为问题可能出在我的应用程序配置上,所以我创建了这个极其简单的示例,它也有同样的问题。

export default class App extends Component {
constructor(props) {
  super(props)
  this.state = {
    response: null,
  }
}

async componentDidMount() {
  const response = await this.logIn()
  console.log('LogIn completed', response)
  this.setState({
      response: response
    })
}

async logIn() {
  const url = 'myurl/login?email=email&password=password'
  const headers = {'MyHeader': 'Header text'}
  try {
    let response = await fetch(url, {
      method: 'POST',
      headers: headers,
      // credentials: 'same-origin',
      credentials: 'include',
    })
    return Promise.resolve(response)
  } catch (error) {
    return Promise.reject(error)
  }
}

render() {
  const url = 'myurl/dashboard'
  const headers = {'MyHeader': 'Header text'}
  return (
    <WebView source = {{
      uri: url,
      headers: headers
    }}
    />
  )
}
}

我在 iOS 9 和 iOS 11 模拟器以及 iOS 11 设备上对其进行了测试。

总结一下这个问题:为什么我通过 fetch 获得的 cookie 没有传递到仅 iOS 上的 WebView。

最佳答案

在 webView 中使用属性 sharedCookiesEnabled={true}。它适用于我的情况。

关于ios - React Native WebView 在 iOS 上缺少 session cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038243/

相关文章:

ios - 在 Swift 4 中对 UIButton 添加操作

react-native - 单击 react 导航5中的标题图标时打开抽屉

ios - decodeTopLevelObjectOfClass 用于取消归档的目的是什么

ios - AVAudioPlayer pause() 未按预期运行

android - Expo在不弹出的情况下获得唯一的设备ID

javascript - 如何区分javascript对象中的url和字符串

asp.net - Safari 和 Asp.net 中 cookie 的奇怪问题

google-chrome - Cookie 不会在 HTTP GET 上发送

python - 网络驱动程序异常 : Message: unable to set cookie while switching cookies from Session to Selenium's Chrome on Instagram

ios - 比较数组与不同对象类型的快速方法