微信扫码登录原理解析

微信扫码登录原理解析关于扫码登录的简单总结

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/_/article/details/冷血之心的博客)


最近针对扫码登录机制做了一个调研,以下以微信网页扫码登录为例进行一个总结。

1、微信扫码登录过程:

  1. 用户在浏览器端访问网页:https://wx..com/ 页面中出现一个二维码
  2. 用户拿着已经登录成功的移动终端(手机)扫码该二维码
  3. 浏览器中获取到了移动终端已经登录的账号信息(包括头像),并且进行了显示
  4. 在手机端点击确定登录,浏览器端登录网页版微信成功,可以进行信息交互
步骤一和步骤三中的过程显示如图所示:
微信扫码登录原理解析             微信扫码登录原理解析

2、扫码登录过程解析:


在第一小节中,给出了微信扫码登录的过程,以下详细阐述在各个过程中都发生了什么。

步骤一:当打开https://wx..com/ 时,其实是浏览器与微信服务器建立了一个连接。二维码中包含一个可唯一识别的字符串,称为uuid(注意,不是uid ,user id 因为此时的二维码并没有用户的任何信息)。二维码其实是一个链接,当我们使用其它扫码工具进行解析时,可以得到类似以下这样的链接:

https://login.weixin..com/l/AfZJf7-ioA==

https://login.weixin..com/l/QcanFWS4hQ== 

后边的就是唯一识别码uuid,其实这是一个登陆请求链接。


步骤二:当一个可以与微信服务器进行交互的(已经登录)的客户端扫码该二维码时,客户端获得了该二维码中的uuid,并且与自身的账号进行绑定。

步骤三:浏览器端获取了客户端已经登录的账号信息,并且进行显示(头像),继续等待客户端点击确认登录

步骤四:客户端点击确认登录,将uuid+账号信息发送到微信服务器,微信服务器收到之后根据uuid找到该浏览器端的访问请求页面并且给出了访问令牌Token,随后网页版微信登录成功,可以进行信息交互了。


3、注意点:

(1)polling和 long polling的区别:

当浏览器端与服务器建立连接之后,一般有两种方式可以获取到服务器的更新信息,即polling和long polling。
polling即轮询,是指浏览器通过周期性轮询,查看服务器是否有更新的信息;
long polling指的是长轮询,浏览器与服务器建立连接之后,服务器将此连接进行挂起,但有更新信息时,再将信息发送给浏览器端。浏览器端重新建立连接,如此循环反复,这是一种长连接的方式。

借用一个比较形象的例子:

传统的polling一般是由C向S询问:“有我的信件吗?”。S接到询问之后,会立即查询,并且把查询结果告诉C,不管有没有C的信件,要么回复:“嗯,你有X封信。”,要么回复:“没,没有你的信”。

Long Polling更像是这样,C向S发出询问:“有我的信件吗?”,S开始查询,如果有则回复C:“嗯,有你x封信”。如果没有,则不作任何回复,而是让C等着,自己一遍一遍地查询是否有订阅者的信。

换句话说:当S收到C的查询请求之后,Polling则只查询一次,并且把查询结果告诉C;而Long Polling收到请求之后,则会一遍一遍地查询,直到有消息才会响应C,不然一直hold Client。

优缺点分析:

轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。 
优点:后端程序编写比较容易。 
缺点:请求中有大半是无用,浪费带宽和服务器资源。 
实例:适于小型应用。



长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。 
优点:在无消息的情况下不会频繁的请求,耗费资源小。 
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。 
实例:Web、Hi网页版、Facebook IM。




(2)扫码登录原理图:

微信扫码登录原理解析


如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群一起交流学习哦~

本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223687.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:38
下一篇 2026年3月17日 下午1:38


相关推荐

  • PreminumSoft Navicat版 10.1.7 注册码

    PreminumSoft Navicat版 10.1.7 注册码转载处:http://blog.sina.com.cn/s/blog_6400e5c50102uy32.html名、组织、注册码:均为NAVN-LNXG-XHHX-5NOO

    2022年10月12日
    5
  • pycharm无法使用第三方库_python第三方库安装失败

    pycharm无法使用第三方库_python第三方库安装失败前言:在使用pycharm学习python的时候,经常需要第三方库,没有第三方库程序就会报错,pycharm也会提醒你要安装所需要的库,安装第三方库的时候往往就出现了问题,如图;下面我将谈谈一些我遇到的问题及解决经验。1.检查pip是否为最新版本pip不是最新版本时,会直接导致你安装第三方库失败。解决方法:第一,看是否直接在pycharm的setting里面Project下的Projec…

    2022年8月27日
    11
  • java treeNode 树转list

    java treeNode 树转list树转 list 一般转换方式递归 写起来复制 容易出错 这样就可以应用栈的进出规则进行转化 栈先进后出 https baike baidu com item E6 A0 88 fr aladdin publicList TreeNode node2List TreeNodenode 返回结果集 List TreeNode result TreeNode TreeNode

    2025年9月23日
    7
  • jquery+json实例

    jquery+json实例

    2021年8月12日
    53
  • Emgu CV3+C图像处理(二):EmguCV主要模块简介

    Emgu CV3+C图像处理(二):EmguCV主要模块简介按 EmguCV3 C 图像处理 一 EmguCV 安装配置与使用中安装 EmguCV 后 打开其文件夹可以看到 常用模块 EmguCV 中具有不同功能的类被分别归类放置在不同的命名空间下 下面简单介绍几个常用的命名空间 命名空间模块说明 Emgu CVOpenCV 图像处理功能的包装 包括 cv String 的包装器 CvString 类 基本图像处

    2026年3月18日
    4
  • bzero等函数源代码实现

    bzero等函数源代码实现看 网络编程 对 bzero 等函数的实现颇有兴趣 于是便翻看了其源代码的实现 bzero bcopy bcmp 等函数源码如下 bzero 源码 voidbzero s1 n void s1 unsignedn registerchar t s1 while n 0 t 0 n bcopy 源码如下

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号