You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cordova 11升级至Android 12后Ajax会话持久化失效求助

解决Cordova 11升级后Ajax会话丢失问题

以下是针对会话持久化失效问题的排查和解决思路:

1. 确保Ajax请求携带凭证

跨域场景下,前端请求必须显式开启凭证携带,否则Cookie不会被发送到服务器:

  • 对于XMLHttpRequest:
    const xhr = new XMLHttpRequest();
    xhr.withCredentials = true; // 关键配置
    xhr.open('GET', '你的请求地址');
    xhr.send();
    
  • 对于Fetch API:
    fetch('你的请求地址', {
      credentials: 'include', // 关键配置
      method: 'GET'
    });
    

2. 完善服务器端CORS响应头

服务器仅返回Access-Control-Allow-Origin是不够的,需补充以下头信息:

  • Access-Control-Allow-Credentials: true:允许携带凭证(Cookie)
  • 注意Access-Control-Allow-Origin不能设为*,必须指定具体的源(比如Cordova应用的file://,或者你服务器允许的域名)
  • 如果是跨域Cookie,Set-Cookie头需添加SameSite=None; Secure(仅HTTPS环境有效),Android 12+的WebView对跨域Cookie的SameSite属性要求更严格。

3. 调整Cordova WebView配置

在config.xml中添加相关偏好设置,适配Android 12(SDK31)的WebView行为:

<!-- 允许跨域导航 -->
<allow-navigation href="*" />
<!-- 配置WebView允许访问文件资源 -->
<preference name="WebViewSettings" value="allowFileAccess=true; allowFileAccessFromFileURLs=true" />
<!-- 适配混合内容(若请求涉及HTTP与HTTPS混合) -->
<preference name="MixedContentMode" value="0" /> <!-- 0=允许所有混合内容 -->

4. 检查插件兼容性

  • 确认cordova-plugin-whitelist已正确安装并配置,升级Cordova后可能需要重新安装插件:
    cordova plugin remove cordova-plugin-whitelist
    cordova plugin add cordova-plugin-whitelist
    
  • 如果使用了第三方HTTP插件(如cordova-plugin-advanced-http),需检查插件是否支持Cordova 11,以及是否开启了Cookie持久化配置。

5. 调试验证Cookie状态

使用Chrome远程调试功能连接设备上的Cordova应用:

  1. 设备开启USB调试并连接电脑
  2. 打开Chrome,输入chrome://inspect
  3. 找到目标应用WebView,点击inspect
  4. 在Application标签下查看Cookies,确认服务器设置的Cookie是否被存储
  5. 在Network标签下检查请求头是否携带Cookie,响应头是否包含正确的Set-Cookie

内容的提问来源于stack exchange,提问作者davej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:52:54