学习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里面已经包含了用户的信息和加密的数据。
相关推荐
captain3766 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒8 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒8 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go8 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥43098 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧8 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老8 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户360055579008 小时前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端
yliucherish8 小时前
从零实现一个 SQL 注入检测引擎:报错注入与布尔盲注的误报控制
后端
bigbread8 小时前
状态模式-住院患者状态管理
后端