学习token、Session、Cookie

无状态设计

指系统或组件不依赖本地存储的上下文信息(状态)来处理请求,每个请求包含完成操作所需的全部数据。以下是其关键要点和深入解析:

核心概念与特点

  • 无状态性:服务端不保存客户端会话状态,每个请求独立处理(如HTTP协议)。
  • 显式传递状态:状态通过请求参数、Token、数据库或外部存储(如Redis)传递。
  • 典型应用:RESTful API、微服务架构、负载均衡场景。

补充:无状态≠无数据,而是状态由客户端或共享存储维护,例如JWT令牌携带用户认证信息。

适合场景

HTTP是无状态的协议,每次请求都是独立的,服务端无法知道上一次请求的发送者与这一次的请求发送者是否是同一个人。所以服务端和客户端需要进行会话跟踪(能知道是谁在访问我),去维护一个状态(能够告知服务端两次请求是否来自同一个客户端的),这就需要用到Cookie或者Session去实现。

  • Cookie存储在客户端,是服务器发送到客户端并保存在本地的数据,当浏览器在下一次向同一个服务器发起请求时被携带并发送到服务器上。
  • cookie是不可跨域(协议,域名,端口有一个不同就满足跨域)的,每个Cookie绑定单个域名,一级域名可以和二级域名共享。

Session

  • Session是基于Cookie,存储在服务器端。
  • Session认证流程
    • 用户请求服务器,服务器根据用户提交的信息,创建对应的Session
    • 服务端返回这个Session的唯一标识信息SessionId给浏览器
    • 浏览器接收到SessionID并存储在本地的Cookie中,当下一次对服务器进行请求时,客户端先判断请求的域名下是否存在Cookie,如果有Cookie信息再将Cookie发送给服务端,服务端从Cookie中读取到SessionID并查找对应的Session。如果没有Cookie,那就说明登陆失败。

Cookie和Session的区别

  • 安全性:Session比Cookie安全,Session存储在服务器端,Cookie存储在客户端。
  • 存取值的类型不同:Cookie只支持字符串,要存别的类型的数据要先转换成字符串,而Session支持任意数据类型
  • 有效期不同:Cookie可设置长期保持(默认登陆功能),而Session一般失效时间较短,客户端关闭或者Session超时都会失效
  • 存储大小不同:单个Cookie保存的数据不超过4K,Session可存储数据远高于Cookie,但访问量过多时,会占用服务器的资源。

Token

  • 服务端无状态,可扩展性好。
  • 支持移动端设备。
  • 安全
  • 支持跨程序调用
  • 每次请求都要携带token,需要把token放到HTTP的Header里
  • 服务端不存放token的数据。用解析token的计算时间换取session的存储空间,从而减轻服务器的压力,减少频繁的查询数据库(用时间换空间)

JWT

  • JWT原理

JWT与Token的区别

  • Token:服务端验证客户端发送过来的Token时,还需要查询数据库获取用户信息,然后验证Token是否有效。
  • JWT:服务端只需要使用密钥进行解密并进行校验即可,不需要查询或者减少查询数据库,因为JWT里面已经包含了用户的信息和加密的数据。
相关推荐
悟空码字6 小时前
三步搞定短信验证码!SpringBoot集成阿里云短信实战
java·spring boot·后端
嘉然今天吃粑粑柑6 小时前
Kafka vs RabbitMQ:从消费模型到使用场景的一次讲清
后端
肥肥今天也好看6 小时前
Java 日期格式化陷阱:YYYY vs yyyy 导致的生产事故分析
后端
用户948357016516 小时前
可观测性落地:如何在 Java 项目中统一埋点 Trace ID?(一)
后端
天天摸鱼的java工程师6 小时前
volatile 关键字底层原理:为什么它不能保证原子性?
java·后端
leikooo6 小时前
SpringAI 多轮对话报错 400 Bad Request
后端·ai编程
小杨同学496 小时前
C 语言实战:堆内存存储字符串 + 多种递归方案计算字符串长度
数据库·后端·算法
golang学习记6 小时前
Go 中防止敏感数据意外泄露的几种姿势
后端
czlczl200209256 小时前
Spring Boot 构建 SaaS 多租户架构
spring boot·后端·架构
小码编匠6 小时前
完美替代 Navicat,一款开源免费、集成了 AIGC 能力的多数据库客户端工具!
数据库·后端·aigc