微信 小程序 session_key 维护

这是 微信官网所说:session_key 说明

  • 以下三方服务端成为服务端
  • 微信服务端成为微信端
  • 小程序端成为小程序
会话密钥 session_key 有效性

开发者如果遇到因为 session_key 不正确而校验签名失败或解密失败,请关注下面几个与 session_key 有关的注意事项。

    wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 auth.code2Session 接口更新服务器存储的 session_key。
    微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。
    开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。
    当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

解释:

wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 auth.code2Session 接口更新服务器存储的 session_key。

说明:session_key 是微信端开放出来让服务端 维护小程序用户登录状态+用户数据的标识,wx.login 会刷新session_key(注意:频繁登录,微信端可能就懒得刷新重复使用之前的了);小程序 wx.checkSession 检查登录状态是否有效,刷新登录时服务端也根据code重新刷新session_key并且保存;

微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。

说明:session_key 有没有效代表当前登录状态有没有效,小程序端不停使用会延迟有效期,这个和web的tokan、session 机制类类似;注意:小程序端wx.checkSession 检查,服务端可通过API auth.checkSessionKey 检查;

开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。
当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

说明:通过 wx.checkSession 检查登录是否有效,无效就重新执行wx.login 并且 刷新服务端的session_key;

session_key 的使用说明:

使用方式:

存在三个端口:小程序端、微信端、三方服务端;session_key 是三方服务端连接微信端的凭证;小程序和三方服务端需要access_token来串通,找识别当前小程序用户的access_token 从而 找到session_key,就可以在微信端获取当前用户数据、操作了;

通常可以确定:小程序登录状态有效,session_key 有效;小程序端登录失效,session_key失效;小程序端久了未使用,session_key 也会失效,服务端再拿sessio_key 去微信获取数据时就会失败;

如何维护?

  1. 执行wx.login 登录获取小程序端的code
  2. 服务端根据code去微信端获取session_key并且缓存;同时生成access_token 保存在小程序端,维持登录状态;
  3. 小程序端请求服务端用户数据时,先wx.checkSession,有效就通过access_token 确定用户,找到session_key;无效就执行wx.login重新登录重新生成access_token,服务端重新获取session_key;
  4. 小程序端长时间不使用,服务端的session_key会失效,无法再用session_key去微信端获取数据,需要小程序端重新执行登录操作; 服务端要获取session_key 只能通过小程序端的登录来操作;

重要提示:

1、由于用户微信可能更换手机号,所以同一个小程序openid 授权获取的手机号可能会和之前不同,这个必须要考虑
2、同一个手机号换绑重新绑定另外一个微信号,openid也会变,所以,也必须考虑

你可能感兴趣的:(小程序微信登录)