在开发微信小程序的时候,如果要用到微信登录功能,一般都会用到两个方法:

wx.checkSession和wx.login方法。开发的代码如下:

前端代码

前端代码中,首先调用checkSession,判断session是否失效,如果没有,则不处理,如果失效了,则调用wx.login方法进行登录。

后端代码

服务端代码中,通过code,调用https://api.weixin.qq.com/sns/jscode2sessionappid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 

获取openId和session_key。然后保存在session中。我设置了后端的session的超时时间是60分钟

遇到的问题:

1. 微信小程序有个问题,就是每次请求对应的sessionid都是不一样的,导致登录时保存在session中的session_key在别的请求中是取不到的。如下:

取session中的值

我在登陆成功后已经将openId保存到了session中,但是getOpenId方法中却取不到对应的openId。为了解决这个问题,我在登陆的wx.login的success中将cookie中的sessionid保存到了storage中

wx.login成功

在访问别的请求的时候将该cookie带上,就可以保证每次都访问同一个session,这样就能取到session中的数据了。

获取session中的信息

2. 后端session过期或者已经失效了,但是checkSession还是success。

我在过了60m后,或者重启后端服务器,让后端的session过期了,但是checkSession还是会返回success。

得到的结论是后端的session过期与否与checkSession返回success没有关系。checkSession用来判断登录信息既session_key是否已经在微信端失效,即服务端的session失效了但是session_key在微信端没有失效,checkSession也是会返回seccess的。

checkSession不用传参,就是用来检查最近一次获取到的session_key在微信端是否失效。

综上,用来判断我们服务端的session是否失效,不能通过checkSession来判断,应该通过服务端的session是否失效来判断。

登录流程

就像微信小程序中给的登录流程一样。我们判断自定义的登录状态即服务端的session是否失效,如果没有失效,就当登录没有失效。如果失效了,就重新调用wx.login的方法进行登录

在用到session_key进行解密时,如果解密失败的话,说明服务端的session_key已经失效了,但是服务端的session没有失效。这个时候也可以调用wx.login重新获取session_key,保存在session中

总结起来就是:

1.在服务端的session中没有openId和session_key了,我们就去调用wx.login去登录,然后将openId和session_key保存服务端的session中

2.在用服务端的session进行解密数据失败时,说明session_key在微信端已经失效了,我们也调用wx.login去登录,将获取的session_key保存在服务端session,重新去获取要解密的数据,在用新的session_key去解密就好了

<以上资讯仅供参考,如果您需解决具体问题,建议您关注作者;如果有软件产品开发需求,可在线咨询加速度产品经理获取方案和报价>

****更多行业产品开发方案,请关注jsudo加速度 https://www.jsudo.com***

【加速度jsudo(www.jsudo.com)】是国内知名企业数字化建设提供商,为企业提供电商平台搭建(多种模式电商平台搭建:B2B/B2B2C/B2C/O2O/新零售等)、智慧园区建设、数字化营销、人才外包等服务,点击这里查看了解更多行业解决方案。