0


【编程基础知识】Cookie、Session和JWT(JSON Web Token)

引言

在无状态的HTTP协议下,状态管理对于Web应用程序至关重要。Cookie、Session和JWT(JSON Web Token)是三种主流的状态管理方案,它们允许客户端与服务器之间保持状态。

一、Cookie

1. 定义

  • Cookie:服务器发送到客户端浏览器的小段数据,存储在用户的计算机上,并随HTTP请求自动发送回服务器。

2. 用途

  • 会话管理:存储用户会话信息,如登录状态。
  • 个性化设置:保存用户偏好设置,如主题或语言选择。

3. 特点

  • 浏览器管理:自动随请求发送到服务器。
  • 大小限制:一般不超过4KB。
  • 属性设置:可以设置过期时间、域和路径等。

流程图:Cookie的工作机制

#mermaid-svg-qFoNR3WKK9WRkE8k {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .error-icon{fill:#552222;}#mermaid-svg-qFoNR3WKK9WRkE8k .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qFoNR3WKK9WRkE8k .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-qFoNR3WKK9WRkE8k .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qFoNR3WKK9WRkE8k .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qFoNR3WKK9WRkE8k .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qFoNR3WKK9WRkE8k .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qFoNR3WKK9WRkE8k .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qFoNR3WKK9WRkE8k .marker.cross{stroke:#333333;}#mermaid-svg-qFoNR3WKK9WRkE8k svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qFoNR3WKK9WRkE8k .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .cluster-label text{fill:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .cluster-label span{color:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .label text,#mermaid-svg-qFoNR3WKK9WRkE8k span{fill:#333;color:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .node rect,#mermaid-svg-qFoNR3WKK9WRkE8k .node circle,#mermaid-svg-qFoNR3WKK9WRkE8k .node ellipse,#mermaid-svg-qFoNR3WKK9WRkE8k .node polygon,#mermaid-svg-qFoNR3WKK9WRkE8k .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qFoNR3WKK9WRkE8k .node .label{text-align:center;}#mermaid-svg-qFoNR3WKK9WRkE8k .node.clickable{cursor:pointer;}#mermaid-svg-qFoNR3WKK9WRkE8k .arrowheadPath{fill:#333333;}#mermaid-svg-qFoNR3WKK9WRkE8k .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qFoNR3WKK9WRkE8k .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qFoNR3WKK9WRkE8k .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-qFoNR3WKK9WRkE8k .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-qFoNR3WKK9WRkE8k .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qFoNR3WKK9WRkE8k .cluster text{fill:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k .cluster span{color:#333;}#mermaid-svg-qFoNR3WKK9WRkE8k div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qFoNR3WKK9WRkE8k :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

       服务器发送Cookie 
     

       客户端存储Cookie 
     

       随HTTP请求自动发送回服务器 
     

       服务器读取Cookie信息 
     

       进行会话管理和个性化设置 
     
二、Session

1. 定义

  • Session:服务器端存储机制,用于跟踪用户状态。

2. 工作流程

  • 创建Session:用户首次访问时,服务器创建Session并生成唯一Session ID。
  • 存储Session ID:通常存储在客户端的Cookie中。

3. 特点

  • 存储方式:数据存储在服务器内存或数据库中。
  • 访问方式:通过Session ID,服务器检索和修改Session数据。

流程图:Session的工作机制

#mermaid-svg-40opdfmoz7aKqfVd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-40opdfmoz7aKqfVd .error-icon{fill:#552222;}#mermaid-svg-40opdfmoz7aKqfVd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-40opdfmoz7aKqfVd .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-40opdfmoz7aKqfVd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-40opdfmoz7aKqfVd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-40opdfmoz7aKqfVd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-40opdfmoz7aKqfVd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-40opdfmoz7aKqfVd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-40opdfmoz7aKqfVd .marker.cross{stroke:#333333;}#mermaid-svg-40opdfmoz7aKqfVd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-40opdfmoz7aKqfVd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-40opdfmoz7aKqfVd .cluster-label text{fill:#333;}#mermaid-svg-40opdfmoz7aKqfVd .cluster-label span{color:#333;}#mermaid-svg-40opdfmoz7aKqfVd .label text,#mermaid-svg-40opdfmoz7aKqfVd span{fill:#333;color:#333;}#mermaid-svg-40opdfmoz7aKqfVd .node rect,#mermaid-svg-40opdfmoz7aKqfVd .node circle,#mermaid-svg-40opdfmoz7aKqfVd .node ellipse,#mermaid-svg-40opdfmoz7aKqfVd .node polygon,#mermaid-svg-40opdfmoz7aKqfVd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-40opdfmoz7aKqfVd .node .label{text-align:center;}#mermaid-svg-40opdfmoz7aKqfVd .node.clickable{cursor:pointer;}#mermaid-svg-40opdfmoz7aKqfVd .arrowheadPath{fill:#333333;}#mermaid-svg-40opdfmoz7aKqfVd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-40opdfmoz7aKqfVd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-40opdfmoz7aKqfVd .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-40opdfmoz7aKqfVd .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-40opdfmoz7aKqfVd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-40opdfmoz7aKqfVd .cluster text{fill:#333;}#mermaid-svg-40opdfmoz7aKqfVd .cluster span{color:#333;}#mermaid-svg-40opdfmoz7aKqfVd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-40opdfmoz7aKqfVd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

       用户访问Web应用程序 
     

       服务器创建Session 
     

       生成唯一Session ID 
     

       Session ID存储在Cookie中 
     

       客户端请求携带Session ID 
     

       服务器通过Session ID检索Session数据 
     

       进行用户状态跟踪 
     
三、JWT

1. 定义

  • JWT:用于在网络应用环境间传递声明的一种紧凑、URL安全的方式。

2. 结构

  • 组成部分:Header(头部)、Payload(负载)和Signature(签名)。

3. 特点

  • 无状态和可扩展性:信息编码在Token中,服务器无需存储Session信息。
  • 跨域认证:可在不同域服务间传递认证信息。
  • 存储更多信息:相比Cookie,可存储更多数据。

流程图:JWT的工作机制

graph TD
    A[客户端请求Token] --> B[服务器生成JWT]
    B --> C[Token包含Header、Payload和Signature]
    C --> D[客户端持有JWT]
    D --> E[客户端请求携带JWT]
    E --> F[服务器验证JWT]
    F --> G[根据Payload信息进行处理]
四、使用场景和比较

1. Cookie

  • 适用场景:存储少量信息,如会话标识符。
  • 缺点:增加带宽消耗。

2. Session

  • 适用场景:服务器需存储大量用户信息。
  • 缺点:增加服务器存储和计算压力。

3. JWT

  • 适用场景:分布式系统和单点登录(SSO)。
  • 缺点:需注意Token安全问题。
五、安全考虑

1. Cookie

  • 安全措施:设置HttpOnly和Secure标志,减少XSS和CSRF攻击风险。

2. Session

  • 安全措施:定期更换Session ID,避免Session固定攻击。

3. JWT

  • 安全措施:使用强签名算法,避免Token篡改;不存储敏感信息。
总结

每种状态管理机制都有其适用场景和优缺点。开发者应根据具体需求和安全要求选择最合适的状态管理方式。

汇总表格

机制定义用途特点安全考虑Cookie服务器发送到客户端的数据会话管理、个性化设置浏览器管理、大小限制、可设置过期时间等设置HttpOnly和Secure标志Session服务器端存储机制跟踪用户状态存储容量大、可存储任何类型的数据、需要服务器资源定期更换Session IDJWT用于传递声明的紧凑方式认证和信息交换无状态、可扩展性、跨域认证、存储更多信息使用强签名算法、不存储敏感信息

标签: json web安全 安全

本文转载自: https://blog.csdn.net/u010425839/article/details/142472450
版权归原作者 Dylanioucn 所有, 如有侵权,请联系我们删除。

“【编程基础知识】Cookie、Session和JWT(JSON Web Token)”的评论:

还没有评论