高频面试题之状态保持三剑客-Cookie-Session-JWT

简介: 本文从 状态保持的原因出发, 针对Cookie, Session, Json-Web-Token三者进行了对比阐述!

高频面试题之状态保持三剑客-Cookie-Session-JWT

cookie0.jpg

1. 为什么需要状态保持?

HTTP是一种不保存状态的协议

cookie1.jpg

HTTP是无状态的协议,每次客户端和服务端会话完成时,服务端不会保存任何会话信息:每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,因此也无法知道上一次的请求发送者和这一次的发送者是不是同一个人。

那为什么HTTP协议是无状态的, 是为了更快的处理大量的事务,确保协议的可伸缩性!

但是服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 或者JWT 去实现。

2.Cookie

Cookie是存储在客户端的一小块数据,也就是存储在本地,cookie会在浏览器下次向同一域名(服务器)发送请求的时候携带在请求头上一起发送到服务器上。

2.1 Cookie的交互流程

第一次网络交互

cookie2.jpg

第二次网络交互

cookie3.jpg

2.2 Cookie的优缺点

优点 缺点
请求头携带方便 不能携带敏感数据,不安全, CSRF攻击
数据小(最多4KB )-传递快 存储数据体量小4kB(一个网站最多20个 一个浏览器最多300个)
存储在客户端(浏览器) 默认不能跨域携带Cookie(可以在父域名设置, 子域名共享解决, 字段domain)
数据类型: 只能是字符串

3.Session

Session是另一种记录服务器和客户端会话状态的机制,Session是基于Cookie实现的, 使用服务器生成的session_id进行标识,用来区别用户

3.1 session的交互流程

cookie4.jpg

3.2 session的优缺点

优点 缺点
存储在服务器 必须依赖于Cookie, 不能独活
数据体量大,存储安全性高 Session共享问题(分布式 多台存储在一台服务器)
存储在浏览器 用户量大 Session存储数据越多 越占用服务器内存消耗
数据类型不限制

4. JWT- JSON-WEB-TOKEN

JWT(json web token)状态保持使用居多。一串完整的JWT由三段落组成,每个段落用英文句号连接(.)连接,他们分别是:Header、Payload、Signature,所以,常规的JWT内容格式是这样的:HHH.PPP.SSS

Header(头部) Header 部分是一个 JSON 对象,描述 JWT 的元数据

   **Payload(载荷)** Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据
   **Signature(签名)** Signature 部分是对前两部分的签名,防止数据篡改

cookie6.jpg

4.1 JWT的交互流程

cookie6.jpg

4.2 JWT的优缺点

优点 缺点
存储在客户端, 一旦签发JWT, 有效期内一直有效(需要特殊处理, 比方说多加一个校验字段)
服务器压力小 JWT建议使用HTTPS传输
数据加密
支持跨域

小结:

遇到这三个中其中一个面试题的时候, 建议3个一起讲解, 主要讲解3点: 实现,交互流程,优缺点, 从cookie-session-jwt逐级递进!
相关文章
|
9月前
每日一道面试题之如果客户端禁止 使用cookie那么还能实现session吗?
每日一道面试题之如果客户端禁止 使用cookie那么还能实现session吗?
|
24天前
|
存储 算法 Java
闲鱼面试:说说JWT工作原理?
闲鱼面试:说说JWT工作原理?
19 0
闲鱼面试:说说JWT工作原理?
|
2月前
|
存储 JSON Java
面试官:Session和JWT有什么区别?
JSON Web Token (JWT) 是一种开放标准,用于安全地在网络上传输信息。JWT 包含头部、载荷和签名三部分,常用于身份验证和授权。与Session相比,JWT有以下优势:无服务器存储状态,支持跨域,适应微服务架构,自包含且可扩展。在Java开发中,可以使用HuTool框架操作JWT,包括生成、验证和解析Token。JWT通过在客户端存储令牌实现无状态认证,与Session的主要区别在于工作原理、存储方式和有效期管理。
65 6
|
2月前
|
存储 安全 容器
面试题:什么是cookie和session?
面试题:什么是cookie和session?
21 0
|
2月前
|
存储 安全 前端开发
面试官:禁用Cookie后Session还能用吗?
面试官:禁用Cookie后Session还能用吗?
52 0
|
2月前
|
存储 前端开发 安全
【面试题】 面试官: 既然有了 cookie 为什么还要 localStorage?
【面试题】 面试官: 既然有了 cookie 为什么还要 localStorage?
|
2月前
|
存储 Java 数据安全/隐私保护
面试官:什么是JWT?为什么要用JWT?
面试官:什么是JWT?为什么要用JWT?
104 0
|
2月前
|
存储 算法 数据库
京东面试:说说Cookie、Session和Token的区别?
京东面试:说说Cookie、Session和Token的区别?
85 0
|
7月前
|
存储 前端开发 Java
经典面试题:理解Cookie和Session之间的区别-2
经典面试题:理解Cookie和Session之间的区别
42 0
|
7月前
|
存储 网络协议 前端开发
经典面试题:理解Cookie和Session之间的区别-1
经典面试题:理解Cookie和Session之间的区别
60 0