古老的鉴权方式:Session和Cookie是一对

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

学习web接口鉴权最绕不开的就是Session/Cookie鉴权方式,这种传统、直接、简洁的鉴权方式曾经是最常用的鉴权手段,直到现在很多热门的鉴权方法中仍是在Session/Cookie模式的基础上改进而来。

1. Cookie是什么

Cookie即HTTP Cookie,也就是常说的浏览器Cookie,又叫做Web Cookie。Cookie主要用于HTTP请求过程中存储请求状态信息,在客户端向服务端首次发起请求时,由服务端返回并保存在浏览器本地,并在之后的请求中携带Cookie休宁县以保持用户的登录状态。 Cookie常用的方面有:

  • 会话状态管理,最常用即用户登录状态的保持
  • 个性化配置,用于保存用户自定义设置的内容
  • 浏览器行为跟踪,通过Cookie中的信息分析用户浏览行为等

2. Session又是啥

既然Cookie是浏览器用来存储数据的,那么这个信息在请求的过程中如何被服务端接收并使用呢,这个时候就需要他的老搭档Session出场了。

Session代表一次会话,其中存储了用户会话所需要的属性和配置信息,用户完成一次会话后,服务端使用Session对象存储客户相关的信息,在之后的请求过程中识别用户并匹配对应会话信息,保持用户状态。 服务端Session信息一般在客户端会话关闭或超时后结束会话。

3. Session和Cookie实现鉴权

3.1 鉴权原理

Session/Cookie是成对存在的,这种鉴权方式主要是依赖服务端和客户端之间的通信,服务端在客户端首次请求后生成一个对应的Session来保存与客户端的会话状态,不同客户端进行访问时通过SessionID标识来唯一区分。

客户端再次请求时,会携带本地Cookie信息,服务端接收请求时需要先解析Cookie内容,拿到其中的SessionID验证后返回对应的Session会话,以此来完成每次请求的鉴权。

Cookie和Session都可以设置一定的生效时间,在有效时间内保证用户的登录状态,失效后需要用户重新请求创建新的Session会话信息。

3.2 使用流程

  1. 在客户端首次请求服务端资源时,服务器会为用户创建session并将session保存在服务器中,然后将session的唯一标识sessionId通过响应返回给客户端。
  2. 浏览器客户端在接收到服务端响应后,会从响应数据中解析到sessionId信息,并将其保存至本地Cookie中,并且浏览器在下一请求时会带上当前域名下的cookie信息。
  3. 服务器再次接受客户端请求时,会首先去解析请求投中的cookie信息,从中找到保存的sessionId信息,并根据sessionId在服务器中找到对应的session会话,验证用户请求是否通过。
  4. session验证通过后,会为用户获取会话信息以保持登录状态。
  5. 当用户登出或session超时,服务器会将用户保存的session会话信息失效处理,之后的用户请求需要重新认证和创建会话。

Session/Cookie鉴权流程时序图 image.png

4. Session和Cookie鉴权使用注意

使用Session/Cookie的方式进行API接口的鉴权是十分简洁和方便的,对于Web应用来讲,浏览器作为客户端保存Cookie信息,每次请求时都会携带Cookie信息。因此只需要服务端在首次请求时创建Session并返回SessionID,其余请求时根据SessionID获取Session会话即可。

Session/Cookie方式是简洁且容易实现的,正因如此,其功能上比较简单,且容易产生风险,且存在一些问题:

扫描二维码关注公众号,回复: 13165971 查看本文章
  • sessionId存储在客户端Cookie,每次请求都要携带整个Cookie,Cookie过大时会影响请求数据传输性能
  • Cookie信息存储在客户端,是所有人都可以看到且可以修改的,因此存在伪造的风险
  • Session是由服务端生成并保存在服务端本身的,对于分布式应用,服务端不止一个,而服务端产生的Session不能互通,导致多个服务请求时重复登录,十分不便
  • 服务端针对用户登录创建Session会话,会产生大量的Session会话,占用大量服务端内存,影响性能
  • 跨域问题,为了防止csrf攻击(跨站请求伪造),Cookie在遇到跨域访问时会失效
  • 移动端APP并没有Cookie的直接实现

5. 总结

本文简单的学习了Session/Cookie鉴权方式的原理和流程,对Session和Cookie的进一步认识更有利于之后对其他鉴权方式的学习。

  • 路要一步步走,技术要一个个学,知识要一点点积累。

猜你喜欢

转载自juejin.im/post/7017439540193263629