前端设计中应该了解的web登录。

当时做登录这块的时候,被session、cookie、token各种概念差点整蒙圈了,上网查询相关概念,发现很多人都是类似的疑惑,比如:

前端应该知道的web登录

前端应该知道的web登录

前端应该知道的web登录

前端应该知道的web登录

来了字节跳动之后,前端很少接触HTTP请求之后的事情,而且登录相关的SDK封装的很好,所以这篇文章就简单的学习记录一下。

为什么会有登录这回事

首先这是因为HTTP是无状态的协议,所谓无状态就是在两次请求之间服务器并不会保存任何的数据,相当于你和一个人说一句话之后他就把你忘掉了。所以,登录就是用某种方法让服务器在多次请求之间能够识别出你,而不是每次发请求都得带上用户名密码这样的识别身份的信息。 从登录成功到登出的这个过程,服务器一直维护了一个可以识别出用户信息的数据结构,广义上来说,这个过程就叫做session,也就是保持了一个会话。

常见的两种登录

忽然想到一点,看了网上很多问题,我觉得大家应该区分两个概念:广义的session和狭义的session

广义的session:广义的session就是从登录成功到登出的过程,在这个过程中客户端和服务器端维持了保持登录的状态,至于具体怎么维持住这种登录的状态,没有要求。

狭义的session:狭义的session就是登录成功后,服务器端存储了一些必须的用户信息,这部分存在服务器端的用户信息就叫做session,也就是接下来要说的第一种登录的实现方式。

服务器session+客户端sessionId

先用图来看:

前端应该知道的web登录

详细说的说一下,这里面主要是这么几个过程:

  1. 客户端带着用户名和密码去访问 /login 接口,服务器端收到后校验用户名和密码,校验正确就会在服务器端存储一个sessionId和session的映射关系

前端应该知道的web登录

2.服务器端返回response,并且将sessionId以set-cookie的方式种在客户端,这样一来,sessionId就存在了客户端。这里要注意的是,将sessionId存在cookie并不是一种强制的方案,而是大家一般都这么做,而且发请求的时候符合domain和path的时候,会自动带上cookie,省去了手动塞的过程。

3.客户端发起非登录请求时,服务端通过cookie中的sessionId找到对应的session来知道此次请求是谁发出的。

token

前面说到sessionId的方式本质是把用户状态信息维护在server端,token的方式就是把用户的状态信息加密成一串token传给前端,然后每次发请求时把token带上,传回给服务器端;服务器端收到请求之后,解析token并且验证相关信息;

所以跟第一种登录方式最本质的区别是:通过解析token的计算时间换取了session的存储空间

业界通用的加密方式是jwt(json web token),jwt的具体格式如图:

前端应该知道的web登录

简单的介绍一下jwt,它主要由3部分组成:

header里面描述加密算法和token的类型,类型一般都是JWT;

payload里面放的是用户的信息,也就是第一种登录方式中需要维护在服务器端session中的信息;

signature是对前两部分的签名,也可以理解为加密;实现需要一个密钥(secret),这个secret只有服务器才知道,然后使用header里面的算法按照如下方法来加密:

总之,最后的 jwt = base64url(header) + \".\" + base64url(payload) + \".\" + signature

jwt可以放在response中返回,也可以放在cookie中返回,这都是具体的返回方式,并不重要。

客户端发起请求时,官方推荐放在HTTP header中:

这样子确实也可以解决cookie跨域的问题,不过具体放在哪儿还是根据业务场景来定,并没有一定之规。

两种登录方案存在的问题

session方式

  1. session方式由于会在服务器端维护session信息,单机还好说,如果是多机的话,服务器之间需要同步session信息,服务横向扩展不方便。
  2. session数量随着登录用户的增多而增多,存储会增加很多。
  3. session+cookie里面存sessionId的方式可能会有csrf攻击的问题,常见的方式是使用csrf_token来解决

jwt方式

  1. jwt的过期时间需要结合业务做设置,而且jwt一旦派发出去,后端无法强行使其作废

后话

理清概念,一身轻松

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/48466.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
优化家优化家订阅用户
上一篇 2022年7月4日 01:52
下一篇 2022年7月4日 01:52

相关推荐

  • 小编分享seo优化中给网站定位的技巧是什么。

    我们在做网站优化的时候网站定位对于我们seo是相当重要的,那对于网站的定位你了解多少呢?接下来我们就来聊一聊seo优化策略:如何给网站定位呢?希望可以帮助到阅读本文的你!  一、为什么要进行网站定位:也就是我…

    2023年6月28日
    05
  • 企业官网优化第一步:首页如何设计。

    随着网络时代的迅速发展,各行各业的企业官网铺天盖地。官网如今就是企业的标配,就像充电器之于手机。那么什么叫官网?官网,顾名思义是官方网站的简称,百度百科给出的解释为:官方网站是公开团体主办者体现其意…

    2022年7月4日 建站资讯
    0219
  • 如何快速搭建一个商城网站。

    其实大部分通过自助建站工具来制网站的人,他们对于商城网站并没有什么太严格的需求,只要求这个商城网站可以实现最基本的购买功能,所以这一类型的网站建设起来很简单,接下来就介绍一个能够非常快速的设计商城网…

    2022年7月4日
    0165
  • 网页设计技巧分享。

    图片、文字和色彩一直是网站设计的核心内容,设计师需对这三大块内容进行合理的排版布局,让每一个细节都发挥出应有的作用。 网站设计中占据篇幅最多的就是图片和文字,想要获得一个好的网站设计效果,就需要将图片…

    2022年7月4日 建站资讯
    097
  • 今日分享html怎么改标题。

    在HTML中,标题是用来表示网页内容的层次结构的,HTML提供了6个等级的标题,从1级(最重要)到6级(最不重要),这些标题等级分别用<h1>到<h6>标签表示,要更改HTML标题,您需要使用适当的标题标签并为…

    2024年6月24日
    00
  • 企业建站:用户体验研究正在改变。

    UX研究是如何与时俱进的,特别是考虑到像LeanUX这样的方法,更少的选择,更多的参与,更多的实验? 1、拉的基础,及时研究。花费数周和数月的时间积累研究是一个等待发生的事故。环境在不断变化。积累研究库存的危险…

    2022年7月3日
    0205
  • 我来说说2023淘宝降权解决技巧有哪些。

    在淘宝上,运营着运营着,突然发现被降权了,相信不少商家会觉得是晴天霹雳,那么,降权了后要怎么做呢,今天,我们就来谈谈2020淘宝降权解决技巧的相关资料,希望这些技巧可以帮助到各位商家在遭遇到降权后来解决…

    2023年10月18日
    00
  • 关于html边框加粗加黑怎么弄。

    在HTML中,我们可以通过CSS(层叠样式表)来改变和美化网页的外观,包括边框的粗细,以下是详细的步骤和技术教学: (图片来源网络,侵删) 1、我们需要在HTML文件中添加一个<style>标签,这个标签用于包含CS…

    2024年6月25日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息