微信小程序(十八)小程序维护登录态

1,446 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

现阶段小程序系列的最后一篇。

我们来看下小程序十如何维护登录态的,这个玩意,早应该说了,但是,直到我小程序做成现在这个状态,我也没有用到微信官方所说的使用sessionkey维护的登录态,所以,这个最后来看一下。

一:何为登录态?

所谓登录态,就是程序在运行时,能够识别当前用户,能够证明自己的唯一性且合法。

我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器);Restful服务通过客户端传过来唯一ID,来识别调用用户。

放一张从网上下载的图片:

在这里插入图片描述

二:使用sessionkey来维护登录态

小程序用户身份的标识可以使用openid,如果是多平台的可以使用unionid,这两个字段对于一个小程序和用户而言是固定不变的,基本上是获取一次与业务系统的用户ID建立对应关系,然后就完事大吉了。

在实际使用中用到SessionKey的场景不多。比如用户信息openid和unionid获取、用户手机号的获取。前者是wx.login()中通过code就能获取到,用SessionKey来解密的场景基本上就很少了。

但是要是获取用户手机号的时候就要使用有效的SessionKey。要注意了是“有效”,虽然在获取SessionKey的时候有个过期时间,所以在使用sessionkey之前需要使用wx.checkSession() 来检查sessionkey是否过期,过期再次调用wx.login进行登录,但是在很多场景下经常会出现超时或已经过期的情况。

比如常见的一种情况是用户信息解密、手机号解密有时可以正常解密,有时候就不行。这时候基本上的问题就是解密用的SessionKey和与加密用的SessionKey不是同一个了。

三: sessionkey的管理思路:

调用wx.login()获取code,服务端根据这个code和appid和appsecret获取SessionKey。

把SessionKey保存到服务器上,一般是不在网络传输,建立自己的SesstionID和生成的SessionKey的对应关系。然后把生成的SessionID传输到小程序客户端,在小程序本地缓存。

在需要使用SessionKey的场景时先使用wx.checkSession()判定一下有没有过期,如果没有过期就把本地的SessionID传输到服务端,服务端根据SessionID查询对应的SessionKey,进行后继的业务操作。

如果本地判定已经过期,那就先wx.login()重新生一次。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客:guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”