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

Ionic iOS(Capacitor、WKWebView)环境下如何发送Cookie?

Ionic iOS(Capacitor、WKWebView)环境下如何发送Cookie?

兄弟我太懂你这种抓狂的感觉了!明明在Web和Android上顺得不行,到了iOS的WKWebView这里,Cookie就像凭空蒸发了一样,直接把认证流程干崩,真的离谱。我之前踩过一模一样的坑,给你整理几个亲测有效的解决办法,你挨个试试:

  • 先把Capacitor的配置拉满
    打开你的capacitor.config.ts,这是Capacitor管Cookie最核心的地方,一定要把域名配置对:

    import { CapacitorConfig } from '@capacitor/cli';
    
    const config: CapacitorConfig = {
      appId: 'com.yourapp.id',
      appName: 'YourApp',
      webDir: 'www',
      bundledWebRuntime: false,
      server: {
        allowNavigation: ['your-api-domain.com'], // 替换成你的后端真实域名
        cookieDomain: 'your-api-domain.com' // 必须和后端设置Cookie的域名完全匹配,别加http/https!
      }
    };
    
    export default config;
    

    重点提醒:cookieDomain绝对不能写错,多一个斜杠、少个后缀都不行,必须和后端Set-Cookie里的域名完全一致。

  • 前后端的Cookie策略要对齐
    WKWebView对跨域Cookie的限制特别严,前后端必须配成一对儿:

    1. 后端设置Cookie的时候,一定要加SameSite=None; Secure(如果是本地测试用HTTP的话,Secure可以暂时去掉,但上线必须加,而且要配HTTPS),同时响应头里必须有Access-Control-Allow-Credentials: true;
    2. 前端发请求的时候,必须带上withCredentials: true,比如用Axios的话:
      axios.get('https://your-api-domain.com/check-auth', {
        withCredentials: true
      });
      

    这俩参数缺一个,WKWebView都不会帮你带Cookie,别问我怎么知道的,都是泪。

  • 清掉模拟器的“历史遗留垃圾”
    有时候模拟器里的旧Cookie、缓存会搞玄学问题,直接暴力清掉试试:

    • 删掉模拟器里的App,重新编译安装;
    • 打开Xcode,选Product -> Clean Build Folder,清完再跑;
    • 也可以用Capacitor的API直接清缓存:
      import { Browser } from '@capacitor/browser';
      
      async function clearOldCache() {
        await Browser.clearCache();
      }
      
  • ATS设置别拖后腿
    如果你的后端用的是HTTP(仅限测试,上线必须HTTPS),iOS的ATS会拦着你,得在Info.plist里加例外:
    打开Xcode里的Info.plist,添加这段配置:

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
      <key>NSExceptionDomains</key>
      <dict>
        <key>your-api-domain.com</key>
        <dict>
          <key>NSIncludesSubdomains</key>
          <true/>
          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
          <true/>
        </dict>
      </dict>
    </dict>
    

    注意,上线前记得把这个临时例外去掉,换成HTTPS,不然App Store可能给你打回来。

另外还有个小坑:如果用localhost或者127.0.0.1在模拟器测试,WKWebView的Cookie规则会不一样,建议用工具把本地服务转成HTTPS域名测,这样更贴近真实环境。

我当时就是靠这几步把问题解决的,你先从Capacitor配置和请求设置开始查,这俩是最容易翻车的地方。

备注:内容来源于stack exchange,提问作者php_nub_qq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:33:13