傻傻分不清的openid、unionid、session_key

基本概念

openid: 用户唯一标识
session_key: 会话密钥
unionid: 同一个微信开放平台下的用户唯一标识

1. openid

小程序官方登录流程时序.png

如何获取openid?官方的时序图就一目了然了:
step 1. 在登录的时候js调用wx.login(),拿到返回的code
step 2. 把code用wx.request()发送给Developer Server
step 3. Developer Server拿着code,连同appid和appsecret,调微信给的api
step 4. 微信把openid和session_key返回给Developer Server
step 5. Developer Server做处理:关联、加密等等
step 6. Developer Server把自定义的登录态返回给js

微信负责提供openid和session_key,至于业务方怎么用,看自己的了,但微信不建议业务方拿到openid和session_key,在不处理的情况下就返回给js。

2. unionid

阅读官方文档当中的UnionID机智说明就不难理解unionid是什么东西了:
"同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。"
但是unionid能够获取是具备前提的:
“微信开放平台帐号必须已完成开发者资质认证”
开发者用认证过的账号登录,在进行小程序开发的时候,才能够通过调用接口wx.getUserInfo(),然后解密获得unionid。

3. session_key

小程序官方加密解密流程

获取session_key的方式和openid一样。
官方文档中的加密签名详细解释了关于session_key的原理和算法。

其实前端不需要对session_key作什么操作,可以了解下它的功能:

  1. 微信那边会对开放数据进行签名和加密,那么Developer Server就可以拿着session_key对这些数据进行校验签名和解密,然后就能知道,拿到的数据到底是不是没有被篡改过的数据。
  2. session_key是具备有效期的,因此开发者可以通过session_key的有效期对登录状态进行维护,避免反复执行登录流程。前端可以通过wx.checkSession()校验当前的session_key是否有效,无效则重新登录;但是不要忘记登录之后通过重新获取session_key的方式,进行更新。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 嗯就这样,如诗如画可泣可歌,像影子追着光梦游,时光停下脚步蓦然回首
    moon_神阅读 139评论 0 0
  • 人家说日有所思夜有所梦。。。我不知道我是不是想成为与众不同的人。。。我才有了与众不同的梦。。。 N年前我无肉不欢。...
    安安妈咪211阅读 284评论 2 1
  • 2017-5-22 校庆的时候,忙着追了2天星。回家的时候,到了小猪该睡觉的时间。通常晚饭后的时间都是陪着猪眯眯的...
    草豆蔻阅读 479评论 0 0
  • 幸福,总是如蝴蝶般翩然而至。 一 秋雨淅淅沥沥,我接了儿子,站在电车旁穿雨衣。儿子弯...
    玫兰妮阅读 281评论 2 2