HarmonyOS鸿蒙Next中Web组件退出应用后cookie被清理

HarmonyOS鸿蒙Next中Web组件退出应用后cookie被清理 Web组件 退出应用后,cookie被清理

3 回复

可以使用如下步骤测试下能否规避问题:

先 configCookieSync -> fetchCookieSync -> saveCookieAsync -> loadurl -> 退出 -> 进入 app -> fetchCookieSync 可以查看效果 示例代码:

import { webview } from "@kit.ArkWeb";
import { BusinessError } from "@kit.BasicServicesKit";
import { LengthMetrics, promptAction } from "@kit.ArkUI";

@Component
export struct WebviewCookieSave {
  private webviewController: WebviewController = new webview.WebviewController();
  url: string = "https://www.baidu.com"

  aboutToAppear() {
    // 配置Web开启调试模式
    webview.WebviewController.setWebDebuggingAccess(true);
    // 仅支持设置单个cookie值。
    webview.WebCookieManager.configCookieSync(this.url, 'a=b');
  }

  build() {
    Flex({ direction: FlexDirection.Column }) {
      Web({
        src: "",
        controller: this.webviewController
      })
        .onControllerAttached(() => {
        })
        .mixedMode(MixedMode.All)
        .width('100%')
        .javaScriptAccess(true)
        .domStorageAccess(true)
        .databaseAccess(true)
        .flexGrow(1)
        .flexShrink(1)
        .flexBasis(1)

      Flex({ wrap: FlexWrap.Wrap, space: { main: LengthMetrics.vp(5), cross: LengthMetrics.vp(5) } }) {
        Button('loadUrl')
          .onClick(() => {
            try {
              // 需要加载的URL是string类型。
              this.webviewController.loadUrl(this.url);
              promptAction.showToast({
                message: "loadUrl success"
              })
            } catch (error) {
              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
            }
          })
        Button('configCookieSync')
          .onClick(() => {
            try {
              // 仅支持设置单个cookie值。
              webview.WebCookieManager.configCookieSync(this.url, 'a=b');
              promptAction.showToast({
                message: "configCookieSync success"
              })
            } catch (error) {
              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
            }
          })
        Button('saveCookieAsync')
          .onClick(() => {
            try {
              webview.WebCookieManager.saveCookieAsync((error) => {
                if (error) {
                  console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
                }
                console.log("saveCookieAsync success");
                promptAction.showToast({
                  message: "saveCookieAsync success"
                })
              })
            } catch (error) {
              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
            }
          })

        Button('fetchCookieSync')
          .onClick(() => {
            try {
              let value = webview.WebCookieManager.fetchCookieSync(this.url);
              console.log("fetchCookieSync cookie = " + value);
              promptAction.showToast({
                message: value
              })
            } catch (error) {
              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
            }
          })
      }
    }
  }
}

更多关于HarmonyOS鸿蒙Next中Web组件退出应用后cookie被清理的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Web组件退出应用后cookie被清理是系统默认行为。鸿蒙Next采用分布式技术,Web组件的cookie管理遵循系统安全策略,退出应用时自动清理cookie以确保用户数据安全。该机制与鸿蒙系统的应用沙箱机制相关,应用沙箱在应用退出时自动清理临时数据,包括Web组件的cookie。开发者若需持久化存储用户数据,应使用鸿蒙提供的持久化存储方案,如Preferences或分布式数据库。

在HarmonyOS鸿蒙Next中,Web组件的cookie在应用退出后被清理,可能是由于系统默认的隐私保护机制或应用未正确配置持久化存储。解决方法如下:

  1. 配置持久化存储:在应用中配置WebStorage以启用持久化存储,确保cookie在应用退出后仍能保留。
  2. 检查应用生命周期:确保应用在后台运行时,Web组件的状态和cookie未被系统清理。
  3. 使用系统API:通过系统API手动保存和恢复cookie,确保数据持久化。

建议开发者根据应用需求选择合适的解决方案,确保用户体验的连续性。

回到顶部