小程序localstorage(微信小程序(抖音小程序):手机号码解析失败解决方案)

本文目录
微信小程序(抖音小程序):手机号码解析失败解决方案
本文以抖音小程序(微信小程序获取流程和接口一模一样)为例,最近博主在做一个抖音小程序的小项目,前端在获取用户手机号的时候,需要调用 tt.login 接口进行登录,登录后返回一个code,这个code有3分钟的失效时间,根据这个code可以获取到sessionKey,这个sessionKey类似于对称加密的密钥,会对用户信息进行加密。在获取用户信息的时候,前端
需要将 《button》 组件 open-type 的值设置为 getPhoneNumber。用户点击后会弹出一个授权弹窗让用户确认(若该用户账户未绑定手机号码会执行一次绑定手机号码的流程;授权弹窗每次使用都会弹出)。 用户同意后,开发者可以通过 bindgetphonenumber 事件回调获取到一个加密数据,开发者可以把该数据传回到自己的服务端进行解密获取手机号。
获取到的加密数据需要使用sessionKey进行解密,因此在获取用户信息前,需要登录一次,获取到code,然后根据code获取到sessionKey,再根据sessionKey进行加密数据的解密,解析出手机号。
根据博主猜测,抖音在登录后会生成一个code,和一个对应的sessionKey,在会话期间(session未过期)的时候获取用户信息,会将用户信息使用sessionKey进行数据的加密,进行数据的解密也需要使用到sessionKey。code和sessionKey是对应的,但是它们的失效期是不一样的,code的失效期是3分钟,sessionKey的失效时间是不定的,只要用户活跃在页面上都不会失效。在获取到code的3分钟内调用 code-2-session 接口,会获取到sessionKey,如果3分钟后根据code获取sessionKey将会获取失败,因此解密也会失败。
因为无法判断用户什么时候开始获取用户信息,所以用户一进入页面,前端就会调用 tt.login 接口进行登录,然后放到localstorage缓存中,在用户点击按钮时,弹出授权框用户确认后获取到用户信息的加密数据,然后前端将缓存的code和加密数据一并传给后端。后端用code先去调用 code-2-session 接口获取到sessionKey,然后以sessionKey为密钥进行AES解密,获取到手机号返回给前台。整个流程看起来没什么问题,但是一旦用户在页面停留时间超过3分钟,然后再去获取用户信息会失败,主要是因为code已经失效,获取sessionKey会失败。
目前的问题就是过了code的有效期后,根据code获取sessionKey失败。那么在前端login获取到code后,先缓存到本地,然后立即调用后台接口去获取sessionKey然后缓存到redis里面,key为code,value为sessionKey。失效时间根据自己的业务设置(小程序页面用户不会停留太久,因此缓存失效时间设置为30分钟),用户退出小程序后,会重新login,然后也会存一份新的code和sessionKey的对应值。
用户在授权到用户信息后,前端直接将缓存的code和加密后的用户信息上传到服务到进行解密。服务端根据code从缓存中先获取到sessionKey,然后再用sessionKey进行解密,解析出手机号进行返回。
以上解决办法每次基本都可以获取手机号成功,但是也会存在一些问题
UserInfoController主要提供两个接口,一个是解密手机号和code2seesion操作
TiktokEncryptedParam 主要是前端传过来的code和加密后的数据
TiktokUserInfoSPI 主要是对接口的封装
TiktokUserInfoSPIAdapter 实现接口
使用AES对称加密
h5获取小程序storage
小程序中Storage模块管理应用本地数据存储,用于应用数据的保存和读取,应用本地数据localStorage,sessionStorage的区别在于数据的有效域不同,前者可在应用内跨域操作,数据存储期是持久化的,并且没有容量的限制,通过plus.storage可获取应用本地数据管理对象
h5获取小程序storage最常用的两个方法:
getItem(key);--根据key值获取应用存储的值,没有值返回null
setItem(key,value);--保存数据至应用存储中,没有值返回null
小程序localstorage能外部读取嘛
小程序localstorage不能外部读取。小程序共享本地storage大小,但是无法相互读写。
缓存问题之异步处理(微信小程序)
微信小程序里面的本地缓存
wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSync)、wx.clearStorage(wx.clearStorageSync)
localStorage :是永久存储,以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。
在小程序中无 Sync 结尾的本地缓存中,都为 异步缓存
wx.setStorage(object)
参数object说明
控制台
表示储存成功
wx.getStorage(object)
示例
这个key值就是先前setStorage的命名key,证明指定获取那个缓存中的数据
wx.clearStorage(object)
清理本地数据缓存
将之前储存在Storage中的数据清空。适用于退出登录后登录信息的清除
wx.getStorageInfo(object)
异步获取当前storage的相关信息( 当前小程序里面所有的storage的储存信息 )
参数说明
执行结果
wx.removeStorage(OBJECT)
从本地缓存中异步移除指定 key值
获取当前data值时将报错undefined
执行结果
小程序locastorage大小
localStorage中一般浏览器支持的是5M大小,在不同的浏览器中localStorage会有所不同。数据是储存在浏览器中的。
例如local storage在chromium里是存在一个本地的sqlite数据库文件里,并且这个数据库文件没有加密。这个文件被存在每个用户的AppData文件夹里。
插件将明文密码存在local storage中,存在本地的sqlite数据库的文件没有被加密。红芯浏览器的官网产品介绍称,其数据缓存及存储层使用了数据加密箱。然而该程序员发现,经他试验,红芯浏览器的数据缓存并未如其宣称的那样进行加密。
内核的技术创新体现在以下三方面:
第一,红芯隐盾该功能主要是让企业的应用系统隐身,只对特定身份和设备可见,从而有效避免外部可能的攻击。
第二,红芯云适配,主要是将企业PC端系统适配至移动端,从而帮助企业快速实现移动办公;
第三,安全可控浏览器,通过私有DNS、加密缓存国密算法支持等功能,帮助企业迸行数据保护和隐私保护这些功能都源自于企业客户的需求。

本文相关文章:
qq游戏小程序怎么关闭 具体操作?小程序用户中心为啥修改不了
2026年10月9日 23:50
赣州小程序开发公司(我想开发一套微信小程序商城系统哪家做的比较便宜)
2026年10月2日 04:20
微信小程序怎么快速入门,做出商业应用产品?线上教育有哪些小程序
2026年9月25日 08:10
网站开发小公司推荐(小企业,想找人开发一个网站或微信小程序,求推荐)
2026年9月8日 03:10
更多文章:
湖北十堰爆炸事故原因(湖北十堰,发生爆炸事故致11死,酿成这起惨剧的起因是什么)
2026年10月11日 05:30
安徽六安一女子在奥迪车内被殴打扒衣,警方称是感情纠纷,案件会如何定性?安徽六安教师讨薪事件真相是什么
2026年10月11日 04:40






