乐趣区

关于小程序:微信-小程序-sessionkey-维护

这是 微信官网所说: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 也会变,所以,也必须思考

退出移动版