uni-app uni.setStorageSync在微信小程序的正式上线后会存在获取不到值的情况
uni-app uni.setStorageSync在微信小程序的正式上线后会存在获取不到值的情况
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 | HBuilderX |
示例代码:
这是我设置值的代码:uni.setStorageSync(USER_TOKEN, "xxxx");
这是我获取值的代码:uni.getStorageSync(USER_TOKEN)
## 操作步骤:
正式上线的小程序会出现这种
预期结果:
登录几天后会获取不到
## 实际结果:
获取是空字符串
bug描述:
uni.setStorageSync存在获取不到值的问题
- 我使用uni.setStorageSync缓存令牌,然后有些用户反馈刚登录几天就自动退出,我后端是有设置令牌的有效期是10天的,所以用户的令牌是有效的;后面加日志排查到是获取缓存用户的令牌为空的,是什么原因会取不到,因为小程序端程序是不会主动去删除的。想请问一下这种情况如何解决
更多关于uni-app uni.setStorageSync在微信小程序的正式上线后会存在获取不到值的情况的实战教程也可以访问 https://www.itying.com/category-93-b0.html
uniapp没有对 setStorageSync 这个方法做特殊处理,直接调用的微信原生方法,产生问题的原因,可以参考微信官方文档查找https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html
更多关于uni-app uni.setStorageSync在微信小程序的正式上线后会存在获取不到值的情况的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我们的好几个小程序也一直在线上呢,没发现这个问题,感觉你有什么地方清缓存了呢
清缓存这个触发机制是有很多的,不是说你不主动清除就一直在的,本地缓存的清理时机跟代码包一样,只有在代码包被清理的时候本地缓存才会被清理。
这种情况通常是由于微信小程序的Storage机制导致的。微信小程序对本地存储有以下限制:
- 存储空间限制:单个小程序最大10MB
- 清理机制:微信会在存储空间不足时自动清理较久未使用的小程序数据
- 用户主动清理:用户可以在手机设置中清除小程序数据
解决方案建议:
- 使用持久化方案:
// 设置时添加过期时间
const setStorageWithExpire = (key, value, expire) => {
uni.setStorageSync(key, {
data: value,
time: Date.now(),
expire: expire
})
}
// 获取时检查过期
const getStorageWithExpire = (key) => {
const item = uni.getStorageSync(key)
if (!item) return null
if (Date.now() - item.time > item.expire) {
uni.removeStorageSync(key)
return null
}
return item.data
}
- 重要数据建议:
- 实现自动重新登录机制
- 将token等关键信息同时存储在vuex/pinia中作为内存缓存
- 考虑使用微信的云开发数据库存储关键数据
- 监控处理:
// 获取token时添加容错处理
let token = uni.getStorageSync(USER_TOKEN)
if (!token) {
// 触发重新登录流程
}