目录
1 问题描述
最近有用户反馈,小程序登陆有问题
小程序成功登陆后,安卓用户预约操作时,偶尔会出现登陆异常情况 。
之前解决过shiro登陆失败的问题, ,但是没有彻底解决登陆失败的问题。
登陆失败现象极其诡异,问题难以复现。
1 用户10秒前刚登陆,用户后续操作马上提示“登陆异常”
2 部分 安卓用户 在登陆后,在后续操作提示“登陆异常”,这种现象是偶然发生的,安卓用户出现登陆异常概率大概是 10分之1 。
2 苹果用户 从未没有出现”登陆异常“现象。
2 登陆实现方案
在介绍问题前,本文先简单描述下本文应用登陆实现方案。
本文的小程序应用是单独使用Cookie来维护登陆状态,登陆并未使用小程序的sessionKey来维护后台登陆状态。
后端Cookie校验用户登陆状态
为什么不使用小程序SessionKey维护登陆状态?
1 老应用有单独Cookie登陆方式。
2 后台支持多平台登陆(比如小程序、h5网页等),不完全依赖小程序SessionKey完成登陆 。
Shiro控制用户权限
1 获取微信小程序code值
2 code值以及appId换取用户openId
3 openId快捷登陆
4 小程序保存登陆Cookie
5 小程序携带Cookie请求后端应用
6 后端根据前端的Cookie校验用户的登陆情况
可惜小程序不支持Cookie,(浏览器一般会保存用户Cookie,方便后续浏览网页使用)
如何解决小程序支持Cookie登陆?
以下是网上常见的Cookie登陆解决方式。
// 登录
wx.login({
success: function (res) {
log.info(res)
//获取登录的临时凭证
var code = res.code;
//调用后端,获取微信的session_key,secret
wx.request({
url: domain + '/user/wxLogin',
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
method: "POST",
data: util.json2Form({
code: code,
appId: that.globalData.appId
}),
success: function (result) {
// cookie存储起来
var cookie = result.header['Set-Cookie']
wx.setStorageSync('cookie', cookie)
},
fail: function (res) {
}
})
}
})
})wx.request从res.header['Set-Cookie']中获取cookie信息,并使用wx.setStoargeSync将cookie信息同


发布评论