1.小程序用户信息存储及自定义登录态
(参考 https://blog.csdn.net/weixin_43126083/article/details/105655402)
(1)小程序没有cookie,自定义登录态(伪cookie)来识别用户。
(2)不建议将敏感用户信息如openid,session_key等传到小程序客户端,无法保证数据安全。
2.用户登录问题
(1)wx.login获取code,wx.request发送code到自身服务器
调取wx.login接口获取登录凭证code,通过wx.request发送code,与自家服务器后台交互,后台调用auth.code2Session接口获取用户登录态信息,包括用户唯一标识openid以及本次登录的会话密钥session_key。
其中auth.code2Session的调用前端也可完成,参考https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
示例代码
wx.login({
success(res){
if(res.code){
//发起网络请求
wx.request({
url:'https://test.com/onLogin',
data:{
code:res.code
}
})
}else{
console.log('登录失败!'+res.errMsg)
}
}
})
(2)自身服务器根据code,appid,secret发送给微信服务器,获取session_key和openid
(3)自身服务器生成3rd_session
3rd_session用于第三方服务器和小程序之间做登录态校验。
(4)自身服务器以3rd_session为key,session_key+openid为value,写入session存储。(redis,memcached之类的存储)
(5)小程序客户端将3rd_session id写入storage
后续用户进入小程序,先从storage读取3rd_session id,再调用wx.resquest的时候发送至服务器,服务器根据3rd_session 查找合法的session_key和openid
3.cookie
网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据。
cookie有效期:
(1)会话cookie:存储于浏览器进程,当浏览器关闭时,会话cookie就不存在了。
(2)存在硬盘的cookie:不会随浏览器的关闭而失效,根据设置的失效时间而过期。
cookie机制和session机制的区别:
(1)cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。session更安全。
4.session
会话,一类用来在客户端与服务器端之间保持状态的解决方案。
session机制是一种服务器端的机制,服务器使用一种散列表的结构来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器会首先检查这个客户端的请求里是否包含了一个session标识--成为session id。
如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就会按照session id把这个session检索出来使用;如果客户请求里不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中国年返回给客户端保存。这个session id会保存在浏览器(客户端)的会话cookie中。
session存放于服务器的内存中,可以通过特殊的方式做持久化管理(memcache,redis)。
注:
(1)客户端只保存在session id到cookie中,而不会保存session。
(2)关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效,也会使保存到硬盘上的持久化cookie消失。
5.sessionID
客户端发送请求时,服务器会生成一个session对象,session对象生成一个对应的sessionID返回给客户端,客户端再次请求时会在cookie中携带该sessionID随请求一起发送给服务器,服务器对sessionID进行验证是否有效。