前言、html
微信小程序的运行环境不是在浏览器下运行的。因此不能以cookie来维护登陆态。下面我就来讲说我根据官方给出的方法来写出的维护登陆态的方法吧。算法
1、登陆态维护编程
官方的文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject小程序
经过 wx.login()
获取到用户登陆态以后,须要维护登陆态。开发者要注意不该该直接把 session_key、openid 等字段做为用户的标识或者 session 的标识,而应该本身派发一个 session 登陆态(请参考登陆时序图)。对于开发者本身生成的 session,应该保证其安全性且不该该设置较长的过时时间。session 派发到小程序客户端以后,可将其存储在 storage ,用于后续通讯使用。后端
从上图能够看出。当咱们经过wx.login()获取code的后,发送给咱们的服务器,而后去请求微信服务器换取获得对应的openid与session_key,openid是该用户在小程序中的惟一标识用于模板通知之类的。session_key就是用来解密用户的敏感信息。unionid之类的。unionid是微信用户在全部微信平台下的惟一标识。下面我会讲解一下如何获得。微信小程序
以上就是个人实现方法。调用wx.login()获得code后请求服务器获取openid与session_key缓存在服务器当中。其中生成一个随机数为key,value为openid与session_key。而后返回到小程序经过wx.setStorageSync('LoginSessionKey',获得的随机数key)缓存在小程序当中。每当咱们去请求服务器时带上LoginSessionKey便可给服务器读取从而判断用户是否在登陆。是否是很简单呢?api
2、用户数据的加解密浏览器
经过wx.login()登陆以后。咱们能够经过wx.getUserInfo()获取用户信息。其中一些不敏感的信息在返回的 result中的userInfo里。如想要获取敏感信息。openid,unionid之类的。则须要从密文中去解密获得。缓存
而密文则在encryptedData这个字段当中。咱们去请求咱们服务器去解密而后获得敏感信息后则能够保存起来。安全
接口若是涉及敏感数据(如wx.getUserInfo
当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据。开发者如须要获取敏感数据,须要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法以下:
微信官方提供了多种编程语言的示例代码(点击下载)。每种语言类型的接口名字均一致。调用方式能够参照示例。
这时候咱们经过小程序获得的result.encryptedData与result.iv与后端获得的session_key 解密出咱们获得的敏感用户信息了。
官方给出的解密文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html