Token、Session、Cookies是什么?如何理解其不同?一文带你了解

简介: 这篇文章详细解释了Token、Session和Cookies的概念、作用及其区别,探讨了它们在维持HTTP无状态连接中用户状态的用途和优缺点,特别是Session的服务器端存储和Token的客户端存储特性,以及它们在不同场景下的应用。

我 | 在这里
⭐ 全栈开发攻城狮、全网10W+粉丝、2022博客之星后端领域Top1、专家博主。
🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60+位同学顺利毕业
🐬专注干货知识分享、项目实战案例开发分享
✈️文章底部有个人公众号二维码。回复 Java全套视频教程前端全套视频教程 即可获取 300G+ 教程资料,以及大量毕设项目源码。
🚪 传送门:Github毕设源码仓库

文章目录

    • ​为什么需要 Token,Session?
    • Session 是什么?
    • Cookies 是什么?
    • 什么是 Session Cookies
    • Token 是什么
    • Token 和 Session 的区别、优缺点

​为什么需要 Token,Session?

  HTTP 是短连接,每次请求获取完数据后就断开了,如果有多个用户访问,我们无法区分哪些调用是A用户的,哪些是B用户的,以及之前调用过什么接口,也就是我们常说的 http 连接是无状态的。每次访问新的接口或者地址,都需要用户重新登录验证
  为了解决这个问题,就有了 Token、Session、Cookie 这三个东西。

在这里插入图片描述

Session 是什么?

  客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMap。Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录。

Session 如何判断是否是同一会话?

  服务器第一次接收到请求时,开辟了一块 Session 空间(创建了Session对象),同时生成一个 sessionId ,并通过响应头的 Set-Cookie:JSESSIONID=XXXXXXX 命令,向客户端发送要求设置 Cookie 的响应;客户端收到响应后,在本机客户端设置了一个 JSESSIONID=XXXXXXX 的 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束;

在这里插入图片描述

  接下来客户端每次向同一个网站发送请求时,请求头都会带上该 Cookie信息(包含 sessionId ), 然后,服务器通过读取请求头中的 Cookie 信息,获取名称为 JSESSIONID 的值,得到此次请求的 sessionId。

Session 的缺点

  Session 机制有个缺点,比如 A 服务器存储了 Session,就是做了负载均衡后,假如一段时间内 A 的访问量激增,会转发到 B 进行访问,但是 B 服务器并没有存储 A 的 Session,会导致 Session 的失效。

Cookies 是什么?

  HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。

HTTP Cookie 机制是 HTTP 协议无状态的一种补充和改良

创建 Cookie

  当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的 Set-Cookie标头,Cookie 通常由浏览器存储,然后将 Cookie 与 HTTP 标头一同向服务器发出请求。

Set-Cookie 和 Cookie 标头

  Set-Cookie HTTP 响应标头将 cookie 从服务器发送到用户代理。下面是一个发送 Cookie 的例子

在这里插入图片描述

此标头告诉客户端存储 Cookie

  现在,随着对服务器的每个新请求,浏览器将使用 Cookie 头将所有以前存储的 Cookie 发送回服务器。

在这里插入图片描述

什么是 Session Cookies

  Session Cookies 也称为会话 Cookies,在 Session Cookies 中,用户的登录状态会保存在服务器的内存中。当用户登录时,Session 就被服务端安全的创建。

  在每次请求时,服务器都会从会话 Cookie 中读取 SessionId,如果服务端的数据和读取的 SessionId 相同,那么服务器就会发送响应给浏览器,允许用户登录。
在这里插入图片描述

总结下:

  • 1、 Session 是在服务端的,用来存储用户的信息;Cookie 是在客户端的,可以用来 存储 Session id(还可以存储其他东西)。
  • 2、Session 空间比较大,因为是在服务端,可以存储用户敏感信息,不会泄露; Cookie有大小限制,因为是在客户端,不应该存储敏感信息,容易暴露。
  • 3、Session 是依赖 Cookie 的,需要它存储 Session Id。
  • 4、Session 可以存储多种类型的值,Cookie 只能存储字符串类型的。

Token 是什么

  Token 中文叫令牌,也是用来解决用户状态的问题,最常见的例子就是登录状态了。
  用户登陆成功后,服务端返回一个 Token 给客户端,客户端把这个 Token 保存到 SessioniStorage 或者 LocalStorage 中,之后发起新的请求时,手动的把 Token 设置到头部的 Authorization 参数中(也可以自定义参数名,常用的是这个),服务端解析这个 Token 就能知道你是谁了。

那么 Token 到底长什么样,大概这样:eyJhbGciOiJIUzI1NiI.eyJzaWduVHMiOjE2MjM3MMwODEwfQ.s_CFOkQSmTLHUKLKJkjsdal

  这是一段经过加密后的 Token,里面包含了 userid 等信息(可以自定义需要包含的数据)。
  当前最流行的 Token 实现是 JWT 也就是 Json Web Token,有各种语言的实现,可以方便的为你生成加密 Token 以及解密出来里面的信息。

Token 和 Session 的区别、优缺点

有了 Session 就可以解决用户状态问题了,为什么还需要 Token ?
这是因为 Session 有它的不足点:

  • 1.需要在服务端存储数据,如果数据多的话,内存就多了,不过也可以存储到磁盘和数据库,但是这样速度会有影响

  • 2.如果有多台服务器,在A服务器创建的 Session 在B服务器上无法读取到,也可以用Redis和数据库来同步,但是又麻烦了

  • 3.Cookie 在不同域名下是独立的,也就是无法跨域,所以 Session 也就无法在多个域名之间使用了。

  • 4.Token 只有一串加密后的字符串,不需要服务端存储,不依赖 Cookie(可以用其他方式存储在客户端),多台服务器之间不需要做数据同步,它更加灵活方便,所以现在越来越多的应用都是用 Token 方式了。

在这里插入图片描述

相关文章
|
4月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
50 1
|
4月前
|
存储 安全 API
Cookie,Session和Token
Cookie,Session和Token
|
4月前
|
存储 JSON 安全
一文带你了解cookie、session、token区别
【4月更文挑战第10天】
362 3
一文带你了解cookie、session、token区别
|
11月前
|
存储 安全 数据安全/隐私保护
session,cookie 和 token 三个概念的区别和联系
session,cookie 和 token 三个概念的区别和联系
|
存储 前端开发 数据库
Session、Cookie和Token的主要区别
Session、Cookie和Token的主要区别
204 1
|
存储 负载均衡 安全
浅谈Token、Cookie和Session
浅谈Token、Cookie和Session
97 0
|
存储 JSON 安全
一次性弄清楚 Authentication & Authorization 以及 Cookie、Session、Token
老虎、老鼠、傻傻分不清楚? 满脸、泥土、失败的被俘虏! 通过本文学习,让我们一次性搞清楚 Authentication & Authorization 以及 Cookie、Session、Token 的区别与联系。
872 2
一次性弄清楚 Authentication & Authorization 以及 Cookie、Session、Token
|
存储 负载均衡 前端开发
一文助你快速理解Cookie,Session,Token的区别
本文详细描述了Cookie,Session,Token的定义、鉴权原理和区别。cookie是由Web服务器保存在用户浏览器上的一小段文本,格式:key=value,包含用户相关的信息。session是依赖Cookie实现的,session是服务器端对象,是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息,确定身份信息。
368 1
一文助你快速理解Cookie,Session,Token的区别
|
存储 安全 API
再看cookie、session和token
cookie、session和token是前后端交互中最重要的一步。
再看cookie、session和token
|
存储 缓存 安全
Cookie、Session与Token的区别理解
由于HTTP协议本身是无状态的,及服务器无法判断用户身份。cookie与session都是用来跟踪浏览器用户身份的会话
119 5
Cookie、Session与Token的区别理解