学习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里面已经包含了用户的信息和加密的数据。
相关推荐
淬渊阁9 小时前
Hello world program of Go
开发语言·后端·golang
Pandaconda9 小时前
【新人系列】Golang 入门(十五):类型断言
开发语言·后端·面试·golang·go·断言·类型
周Echo周9 小时前
16、堆基础知识点和priority_queue的模拟实现
java·linux·c语言·开发语言·c++·后端·算法
魔道不误砍柴功10 小时前
Spring Boot自动配置原理深度解析:从条件注解到spring.factories
spring boot·后端·spring
风象南10 小时前
基于Redis的3种分布式ID生成策略
redis·后端
魔道不误砍柴功11 小时前
Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客
java·spring boot·后端
Asthenia041211 小时前
分布式唯一ID实现方案详解:数据库自增主键/uuid/雪花算法/号段模式
后端
Asthenia041211 小时前
内部类、外部类与静态内部类的区别详解
后端
Asthenia041211 小时前
类加载流程之初始化:静态代码块的深入拷打
后端