uni.clearStorageSync()仅清除uni.setStorage和uni.setStorageSync写入的key-value数据,不清理下载文件、离线包、沙盒目录、WebView缓存、插件缓存及原生Cookie等。

uni.clearStorageSync()能清掉哪些数据
它只清 uni.setStorage 和 uni.setStorageSync 写入的 key-value 数据,底层对应 App 的 SQLite 或文件型本地存储区。但不会动以下任何内容:uni.downloadFile()保存的文件、uni.saveFile()存的离线包、uni.getFileSystemManager()操作的沙盒目录(如 uni.env.USER_DATA_PATH)、WebView 缓存、插件缓存(地图/音视频)、原生 Cookie 或 SQLite 独立库。
App端真正占空间的文件怎么删
不能只调 uni.clearStorageSync(),得手动清理沙盒目录里的文件:
- 先用
uni.getSavedFileList()拿到所有通过uni.saveFile()保存的文件列表,再逐个传filePath给uni.removeSavedFile()—— 注意 iOS 并发太多会报too many open files,建议每次最多 5 个并发 - 下载类文件(比如
uni.downloadFile()保存到uni.env.TEMP_PATH或uni.env.USER_DATA_PATH)得自己用uni.getFileSystemManager()列目录 +fs.stat()判断是否过期 +fs.unlink()删除 - 别直接
fs.readdir()后全删,容易误删登录凭证或正在加载的离线包;建议文件名带前缀(如_cache_)或配套写.meta.json记录用途和过期时间
WebView 缓存和网络层缓存必须单独处理
这部分完全脱离 JS 控制,但能间接清:
-
plus.cache.clear()是最接近“一键”的方式,但它只清 WebView 内核缓存(HTML/CSS/JS/图片),不碰 OkHttp 或 CFNetwork 的 HTTP 磁盘缓存 —— 后者得靠服务端响应头Cache-Control: no-store或max-age=0配合 - iOS 上
plus.cache.clear()会清整个 WebView 缓存;Android 行为一致,但部分厂商 ROM 可能拦截或延迟生效 - 别在 H5 或小程序里调
plus.cache.clear(),它只在 App 端有效,且必须用条件编译包裹:#ifdef APP-PLUS
登出场景下怎么安全清,而不是无脑核爆
用户点“退出登录”时,真正该删的只有 token、refreshToken、userInfo 这几个关键项,其他如语言设置、页面展开状态可以保留:
- 用
uni.removeStorageSync('token')同步删,避免异步回调期间用户又触发其他操作 - 删之前先
uni.getStorageSync('token') !== undefined判空,某些 Android 低版本对不存在的 key 会 throw error - 千万别在
onLaunch里无条件调uni.clearStorageSync(),否则用户冷启动进 App 就丢登录态 - 如果用了 Vuex/Pinia,记得同步 commit 清状态,否则组件 data 里还挂着旧用户信息
真正“一键清除持久化数据”这件事,在 App 端从来不是单个 API 能解决的。文件系统、WebView、网络栈、插件缓存各自独立,连清理时机都不同——比如文件得按生命周期删,WebView 缓存适合在登出后延时 300ms 再清,而网络层缓存基本只能靠服务端配合。漏掉任意一层,用户都会觉得“明明点了清除,怎么还是旧数据”。











