HarmonyOS鸿蒙Next中app内嵌h5网页存储了登录信息等内容在cookie,如何避免清理缓存时候清理掉web组件内H5的cookie

HarmonyOS鸿蒙Next中app内嵌h5网页存储了登录信息等内容在cookie,如何避免清理缓存时候清理掉web组件内H5的cookie

app内嵌webview的h5页面,通过

fileIo.rmdirSync(getContext().cacheDir)
fileIo.rmdirSync(getContext().getApplicationContext().cacheDir)

清理app的缓存时候 会把h5的cookie也清理,应用退后台后,再次进入app,h5需要重新登录,如何解决呀 求大佬!!!

7 回复

将cookie 信息也同时存储在app端呢, 加载web组件的时候传递过去.

不知道这个登录是在H5端做的, 还是原生做的.

更多关于HarmonyOS鸿蒙Next中app内嵌h5网页存储了登录信息等内容在cookie,如何避免清理缓存时候清理掉web组件内H5的cookie的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


登录H5做的 不是原生 就是内嵌一个h5网页发个第一版,但是用清理缓存时候 把cookie也清理了,

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

感觉这个问题, 两个方法:

第一种: 修改H5登录. 再登录成功之后调用原生的方法将token传到原生保存, 每次打开web都设置cookie为原生保存的token.

第二种: 不需要修改H5, 像楼下提供的方法, 但是要想办法保证token更新正常.(退出登录tokens变更的情况)

ps: 好像没有直接方式, 修改web文件缓存路径, 让不被清空.至少我没有找到.,

可以再清除缓存之前,使用WebCookieManager.fetchCookieSync获取cookie,

清除之后,再使用WebCookieManager.configCookieSync将cookie存进去

在鸿蒙Next中,Web组件内H5的cookie可通过配置WebStorage保留属性避免被清除。具体操作:在web组件配置中设置webStorageAccess属性为true,并确保不主动调用clearCache方法。同时,H5页面应使用持久化存储方案如localStorage替代部分cookie数据。系统级应用缓存清理不会影响WebView独立存储空间。

在HarmonyOS Next中,要避免清理缓存时清除Web组件内H5的Cookie,可以通过以下方案解决:

  1. 使用持久化存储替代Cookie: 推荐使用WebStorage API中的localStorage替代Cookie存储登录信息,因为:
  • localStorage数据不会随缓存清理而被清除
  • 存储容量更大(通常5MB)
  • 数据永久保存除非主动清除
  1. 修改缓存清理逻辑: 在清理缓存时排除Web组件的存储目录:
// 获取缓存目录时排除web目录
const cacheDir = getContext().cacheDir;
const files = fileIo.listFileSync(cacheDir);
files.forEach(file => {
  if(!file.includes('webview')) { // 跳过webview相关目录
    fileIo.rmdirSync(file);
  }
});
  1. 配置Web组件的缓存策略: 在加载Web组件时设置缓存模式:
webview.getWebStorage().setDomStorageEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); // 禁用缓存
  1. 实现应用内自动登录:
  • 将H5的登录信息同步到Native侧存储
  • 检测到Cookie丢失时通过JS桥接自动注入凭证

注意:方案2需要确保有正确的文件路径权限,方案4需要Native和H5之间的通信机制配合实现。

回到顶部