微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的

如题所述

  在电脑上使用微信时,你可能已经发现微信不提供传统的账号密码登陆,取而代之的是通过扫描二维码进行登陆。今天就要研究下次登陆方式微信时如何实现的?
  1、每次用户打开PC端登陆请求,系统返回一个唯一的uid,并将uid的信息绘制成二维码返回给用户。这里的uid一定是唯一的,否则就会造成你登陆了其他用户的账号或者其他用户登陆你的账号。
  2、当用户使用登陆后的微信扫描该二维码的时候,会将这个uid和手机上的微信账号及密码产生的token进行绑定,并上传到服务器。
  3、WEB通过JS不断的向后端发起请求,查询有没有关于uid的登陆记录(uid和token是否存在于服务器上)。实现代码可以从微信页面获取:
  function _poll(_asUUID) {
  var _self = arguments.callee,
  _nTime = 0;
  _sCurUUId = _asUUID;
  
  _logInPage("_poll Request Start, time: " + new Date().getTime());
  _nTime = new Date().getTime();
  $.ajax({
  type: "GET",
  url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip,
  dataType: "script",
  cache: false,
  timeout: _nAjaxTimeout,
  success: function(data, textStatus, jqXHR) {
  _logInPage("_poll Request Success, code: " + window.code + ", time: " + (new Date().getTime() - _nTime) + "ms");
  switch (_aoWin.code) {
  case 200:
  _sSecondRequestTime = new Date().getTime() - _sSecondRequestTime;
  _logInPage("Second Request Success, time: " + _sSecondRequestTime + "ms");
  clearTimeout(_oResetTimeout);
  
  $.get(_aoWin.redirect_uri + "&fun=new", function(msg) {
  _logInPage("new func reponse, reponseMsg: " + msg);
  _reportNow("new func reponse, reponseMsg: " + msg);
  var code = msg.match(/<script>(.*)<\/script>/);
  if(code){
  eval(code[1]);
  }else{
  $("#container").show();
  $("#login_container").hide();
  }
  });
  
  _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Success, uuid: " + _asUUID + ", time: " + _sSecondRequestTime + "ms");
  break;
  
  case 201:
  clearTimeout(_oResetTimeout);
  show_tip = 0;
  $('.errorMsg').hide();
  $('.normlDesc').hide();
  $('.successMsg').show();
  _logInPage("First Request Success");
  _reportNow("/cgi-bin/mmwebwx-bin/login, First Request Success, uuid: " + _asUUID);
  // setTimeout(function(){
  _logInPage("Second Request Start");
  _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Start, uuid: " + _asUUID);
  
  _sSecondRequestTime = new Date().getTime();
  
  _nAjaxTimeout = 5 * 1000;
  _self(_asUUID);
  // }, 500);
  break;
  
  case 408:
  setTimeout(function(){
  _self(_asUUID);
  }, 500);
  break;
  
  case 400:
  case 500:
  _reset();
  _afterLoadWebMMDo(function(){
  _aoWin.Log.d("500, Login Poll Svr Exception");
  });
  break;
  }
  },
  error: function(jqXHR, textStatus, errorThrown) {
  if (textStatus == 'timeout') {
  setTimeout(function(){
  _self(_asUUID);
  }, 500);
  } else {
  setTimeout(function(){
  _self(_asUUID);
  }, 5000);
  
  _logInPage("_poll Request Error:" + textStatus);
  _afterLoadWebMMDo(function(){
  _aoWin.Log.e("Login Poll Error:" + textStatus);
  });
  }
  }
  });
  }
  网页客户端每500毫秒就向服务器发起ssl请求,请求当前二维码的登陆信息,如果返回结果201,则说明已经获取扫描二维码终端相同的账号登陆授权,当返回其他结果时,将在500毫秒之后重新发起请求。
  类似微信登陆场景应用场景还是很多,比如通过二维码进行设备间的授权。比如使用手机遥控 装有android系统的电视盒等。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-11-16

    每打开一次微信网页版页面的时候会随机生成一个含有唯一 uid 的二维码,每次刷新页面都会不一样(这个可以保证一个 uid 只可以绑定一个账号和密码,如果一个 uid 可以绑定多个账号和密码,那么很可能你的电脑会登陆别人的微信哦);

    当用户使用登陆后的微信扫描该二维码的时候,会将这个 id 和手机上的微信账号及密码绑定,并上传到微信网页版服务器;

    微信网页版页面每隔 1 秒或 2 秒会 get 请求该 id 对应的微信账号及密码,如果 id 绑定上了微信账号和密码,那么就可以请求到账号和密码,就可以自动登陆了。

第2个回答  2016-06-27
电脑请求网页后,微信服务器生成一个唯一的ID(这里是UUID)给客户端网页,客户端定时发起向微信服务器的连接(这里类似于轮询),微信服务器保持这个连接(这里类似于长连接),保持一段时间(大概27秒)返回一个“还没人扫码”的标识,于是客户端再开连接手机微信扫码并解码,解码出来是一个URL也好,是一段文本也好,总之这段东西匹配了手机微信登陆网页版的要求,于是手机微信带着解码出来的信息去请求微信服务器。这里就已经达到了特定微信账号和某个特定网页相关联的目的
电脑这里微信服务器马上在长连接中返回“有人扫码了”的表示并结束连接,网页提示扫描成功,然后打开长连接等待确认登陆的标识;手机这里么则根据二维码的信息打开对应网页确认登陆
后面其实和前面一样了,手机微信确认登陆的其实就是请求服务器说这个可以登录了,然后服务器给网页的长连接中返回可以登录的标识并结束长连接,然后跳转到消息网页

微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的
1、用浏览器打开微信的时候,微信随机分配了一个链接。2、二维码的转码规则是统一的,只要是个二维码扫描软件,谁都能拿到这个链接。3、微信拿到了,就可以从微信客户端发一条信息给服务器,告诉服务器,现在是谁使用了某个链接,其他二维码扫描软件,不能和微信服务器通话,所以毫无价值。4、这时候,刚...

微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的
2、数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。下面小草就用一个案例带你了解二维码的编码过程,以对数据01234567编码为例 1)分组:012 345 67 2)转成二进制:012→0000001100 345→0101011001 67 →1000011...

微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的
手机微信和网页版微信再未登陆之前是不一致的,在扫描二维码之后就形成了一个定位,网页版微信二维码每一个都不一样,当手机登陆微信扫描之后,手机就会发送一个确认单给微信服务器,同时服务器就返回给网页登陆页面,只有手机登陆在线确认的时候,网页版才会在线!

扫二维码是什么原理?
2、当用户使用登陆后的微信扫描该二维码的时候,会将这个uid和手机上的微信账号及密码产生的token进行绑定,并上传到服务器。3、WEB通过JS不断的向后端发起请求,查询有没有关于uid的登陆记录(uid和token是否存在于服务器上)。实现代码可以从微信页面获取:function _poll(_asUUID) { var _self = ar...

微信怎样扫二维码登录
问题五:第三方网站微信扫二维码登录的功能是怎么实现的 首先你得去开放平台注册个帐号,然后认证一下,接着申请一个网站引用,这样你就可以用他的那些接口了,然后按照官网的说明一步一步来就可以了.问题六:微信扫描二维码登录网页是什么原理,前后两个事件是如何联系的 在电脑上使用微信时,你可能已经...

几种常见的诈骗手段及如何防范
通过盗取微信号、绑定微信的QQ号码以及手机号码等方式,获取微信个人信息,骗子在冒充主任与其家人朋友联系,并以各种理由要钱。 5、点赞诈骗。点赞诈骗分两种:第一种是集满多少个赞就可以获得什么礼品或优惠,实际等你集满了要求的“赞”,去兑换礼品或领取免费消费卡时,发现拿到手的奖励“缩水”。第二种是商家发布“...

你听过最无语的诈骗案是什么?
2.二维码诈骗。诈骗分子以打折、团购为诱饵,要求受害人扫描二维码加入会员,实则附带木马病毒。一旦扫描安装,木马就会盗取银行卡号、密码等个人信息,然后实施盗划资金。这种情况不要随便扫描二维码,扫二维码后先辨别网址真假。如果不能辨别,请不要安装,以防被骗。3.点赞诈骗。诈骗分子冒充商家发布“点赞...

怎么做微信二维码
2)如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。是的,是把参数返回给开发者,也就是你自己,不是给用户推送特定信息或跳转到页面。(我也想要那种用户扫描关注后跳到指定页面的高级功能,也有一些微信号实现了,但是穷人家没有技术人员没有第三方平台...

微信诈骗案例
2、微信钱包登录移动要设置密码。 九、扫码送礼 案例:今年315晚会模拟了一个典型生活情景剧 “扫二维码免费送一桶油”,不少网友抱着扫完关注领礼品后马上取消关注的心态,对扫码送礼活动来者不拒。可是却不知个人身份信息、银行卡卡号包括密码等都被骗子一览无余,导致资金被盗。 分析:二维码暗藏木马风险,光从表面...

多地网友微信凌晨被陌生设备登录,官方对此是如何回应的?
需要扫描二维码验证才可以。那时候我才知道原来代码根据登录设备不同显示也不同。第二种情况笔者暂时没有遇到过,不敢随便乱说,但笔者知道另一种情况,有一些群里,部分人曾经将自己的微信租借出去过,当时你们看到的信息可能是只需要夜间被登录下就可以第二天领取多少费用,这种如果你同意过第一次,也...

相似回答