学习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里面已经包含了用户的信息和加密的数据。
相关推荐
恸流失4 小时前
DJango项目
后端·python·django
Mr Aokey6 小时前
Spring MVC参数绑定终极手册:单&多参/对象/集合/JSON/文件上传精讲
java·后端·spring
地藏Kelvin7 小时前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
菠萝017 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
长勺7 小时前
Spring中@Primary注解的作用与使用
java·后端·spring
小奏技术8 小时前
基于 Spring AI 和 MCP:用自然语言查询 RocketMQ 消息
后端·aigc·mcp
编程轨迹8 小时前
面试官:如何在 Java 中读取和解析 JSON 文件
后端
lanfufu8 小时前
记一次诡异的线上异常赋值排查:代码没错,结果不对
java·jvm·后端
编程轨迹9 小时前
如何在 Java 中实现 PDF 与 TIFF 格式互转
后端
编程轨迹9 小时前
面试官:你知道如何在 Java 中创建对话框吗
后端