Vue+element+Nodejs学习记录(3)

本文详细探讨了两种常见的登录方式:基于服务器session+客户端sessionId的登录和JWT(JSON Web Tokens)登录。讨论了session、cookie与token的概念及其应用场景,并分析了各自存在的问题,如session的存储和扩展性问题,以及JWT的过期管理和撤销问题。同时,提到了使用Redis解决session存储和共享的问题。
摘要由CSDN通过智能技术生成

1.常见的两种登陆方式

参考文章:https://zhuanlan.zhihu.com/p/62336927

登录就是用某种方法让服务器在多次请求之间能够识别出你,而不是每次发请求都得带上用户名密码这样的识别身份的信息。

从登录成功到登出的这个过程,服务器一直维护了一个可以识别出用户信息的数据结构,广义上来说,这个过程就叫做session,也就是保持了一个会话。

广义的session和狭义的session

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

狭义的session:狭义的session就是登录成功后,服务器端存储了一些必须的用户信息,这部分存在服务器端的用户信息就叫做session

1.第一种登陆方式

服务器session+客户端sessionId

在这里插入图片描述

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

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

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

2.第二种登陆方式

token

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

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

业界通用的加密方式是jwt。

两种登陆方式存在的问题

session方式

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

jwt方式

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

2.session,cookie和token

cookie

存储在浏览器的一段字符串(最大4kb)
跨域不共享(跨域:协议、域名、端口不一样)
格式如k1=v1;k2=v2;k3=v3;因此跨域存储结构化数据

每次发送http请求,会将请求域的cookie一起发送给server
server可以修改cookie并返回给浏览器
浏览器中也可以通过JavaScript修改cookie(有限制,服务端设置httpOnly后浏览器端不能修改)(通过document.cookie浏览器端可以获取cookie)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值