在常见的App或者Web端中,经常见到的就是登录操作。而我们肉眼看到的就是在输入账号密码后,就可以看到对应账号密码的联系人列表、头像或者一切属于这个账号的东西。客户端也会执行一些其他操作,比如上传图片,发表评论等等。依照这个逻辑去联想一下,粗略的可以想到在服务端操作肯定是这样的:收到账号密码———>根据此账号密码做验证———>去数据库查询对应数据———>返回给客户端。收到账号密码———>根据此账号密码做验证———>去数据库查询对应数据———>上传图片等逻辑。虽然说客户端不需要考虑后端是怎么给到自己数据的,但是请求的逻辑通常是在后端定义的。我们在开发过程中会常常听到一个关键字段:Token。什么是Token?又有什么作用呢?

    这个时候我们需要去关心一下服务端的逻辑了。一两个用户无所谓,可以每次都判断一下客户端发过来的账号密码,是否在自己的数据库中存在,如果存在则正常登录成功,不存在则返回登录失败,400等状态信息。但是如果像微信,QQ这些有成千上万个用户呢?如果每次都执行根据客户端发送过来的账号密码然后查询数据库进行比对这个逻辑的话,如果同时进行,那也会查询成千上万次查库操作,会给服务端带来很大的压力。所以,出现了一个很好的办法。就是服务端做一个特殊字段,先保存在服务端本地,然后客户端根据账密先请求到这个特殊字段字段,保存在客户端本地,然后之后的请求只需要带着这个特殊字段,进行数据比对就好了,省去了每一次请求都要验证账密是否是自己的用户这一步操作,减轻了服务端的压力。大概流程,我画了一个很丑很简单的图片。
    image.png

    这个特殊字段,就是Token。至于它要做什么样的处理,看业务需求了。服务端的数据模型大概就是这样的,我依然画一个很丑的图来说明。
    image.png
    每一个用户的数据都会被一个唯一的Token去标记,客户端只需要用账号密码,就可以请求到对应用户的数据。每次请求就带着这个Token,这样就不需要每次去比对账号密码了,客户端也不需要每次请求都携带账号密码了,携带Token就可以了。
    逻辑:服务端建立token———>客户端携带账号密码请求token———>服务端返回token———>客户端保存token———>客户端携带token发起请求———>登录成功。