news 2025/12/17 20:18:17

Session、Cookie、Token讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Session、Cookie、Token讲解

目录

  • 一、Cookie讲解
    • 1、概念
    • 2、Cookie 的主要属性
    • 3、使用流程
    • 4、cookie 主要特点
  • 二、Session讲解
    • 1、Session概念
    • 2、流程图
    • 3、Session和Cookie的区别
  • 三、token讲解
    • 1、概念
    • 2、Token的组成
    • 3、Token认证流程
  • 四、三者对比

我们都知道HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。
这种无状态的方式就会存在一个问题:如何判断两次请求的是同一个人?就好比用户在页面 A 发起请求获取个人信息,然后在另一个页面同样发起请求获取个人信息,我们如何确定这俩个请求是同一个人发的呢?
为了解决这种问题,我们就迫切需要一种方式知道发起请求的客户端是谁?此时,cookie、token、session 就出现了,它们就可以解决客户端标识的问题,在扩大一点就是解决权限问题。
它们就好比让每个客户端或者说登录用户有了自己的身份证,我们可以通过这个身份证确定发请求的是谁!

一、Cookie讲解

1、概念

Cookie是一种在客户端存储数据的技术(这里指的是Web端),它是由服务器发送给客户端的小型文本文件,存储在客户端的浏览器中,大小限制大致在 4KB 左右。在客户端发送请求时,浏览器会自动将相应的 Cookie 信息发送给服务器,服务器通过读取 Cookie 信息,就可以判断该请求来自哪个客户端。Cookie 可以用于存储用户的登录状态、购物车信息等。

在以前很多开发人员通常用 cookie 来存储各种数据,后来随着更多浏览器存储方案的出现,cookie 存储数据这种方式逐渐被取代,主要原因有如下:
1、cookie有存储大小限制,4KB 左右。
2、浏览器每次请求会携带 cookie 在请求头中
3、字符编码为 Unicode,不支持直接存储中文
4、数据可以被轻易查看

2、Cookie 的主要属性

  1. 名称(Name) 和 值(Value)
    核心内容,以键值对形式存储信息。
    名称和值在创建时设置,并且会被编码(通常为 URL 编码)。
  2. 有效期(ExpiresMax-Age
    Expires:指定一个绝对的过期日期/时间(GMT 格式)。超过此时间,Cookie失效。
    例如:Expires=Wed, 21 Oct 2026 07:28:00 GMT
    如果不设置或设置为过去的日期,Cookie将成为会话 Cookie,浏览器关闭后即删除。
    Max-Age:指定一个以秒为单位的相对过期时间。优先级高于Expires
    例如:Max-Age=3600 (1小时后过期)
    值为 0 或负数会立即删除该 Cookie。
  3. 作用域(DomainPath
    Domain:指定哪些主机可以接收此Cookie
    例如:设置为.example.com,则www.example.comapi.example.com等子域名都能访问。
    如果不设置,默认为当前文档的主机(不包含子域名),且现代浏览器会将其限制为当前主机。
    不能设置为当前域名所属域之外的域(这是安全限制)。
    Path:指定 URL 路径前缀,只有路径匹配时才会发送 Cookie。
    例如:Path=/docs,则/docs、/docs/Web/下的请求都会携带此Cookie,而/admin则不会。
    默认为当前请求路径的父目录,但通常设为 / 表示整个站点。
  4. 安全性(Secure,HttpOnly,SameSite
    Secure标记为SecureCookie只能通过HTTPS协议加密传输,防止明文传输被窃听。
    HttpOnly:标记为HttpOnlyCookie无法通过JavaScriptdocument.cookie API访问。
    关键安全属性,能有效防止跨站脚本攻击(XSS)窃取 Cookie。
    SameSite:控制 Cookie 在跨站请求时是否发送,是防御跨站请求伪造(CSRF)攻击的重要机制。
    Strict:最严格。完全禁止在跨站请求中发送Cookie。例如,从其他网站链接过来,不会发送此 Cookie。
    Lax:(现代浏览器默认值)。允许在安全的顶级导航(如点击链接)或 GET 请求中发送 Cookie,但禁止在跨站的 POST 请求或嵌入资源(如图片、iframe)中发送。平衡了安全与用户体验。
    None:允许跨站发送Cookie。必须同时设置Secure属性(即仅 HTTPS 下可用)。常用于需要跨站身份验证的场景(如第三方登录)。

3、使用流程

那么我们是如何通过 cookie 来实现用户确定或者权限的确定呢?看下图:

1.客户端发送请求到服务端(比如登录请求)。
2.服务端收到请求后生成一个session会话。
3.服务端响应客户端,并在响应头中设置Set-Cookie。Set-Cookie里面包含了sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中sessionId就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。
4.客户端收到该请求后,如果服务器给了Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。
5.客户端发送其它请求,自动携带了cookiecookie中携带有用户信息等。
6.服务端接收到请求,验证cookie信息,比如通过sessionId来判断是否存在会话,存在则正常响应。
第一个请求通常是不带 Cookie 的。

4、cookie 主要特点

1.cookie 存储在客户端
2.cookie 不可跨域,但是在如果设置了 domain,那么它们是可以在一级域名和二级域名之间共享的。

二、Session讲解

1、Session概念

Session由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含SessionId标识,如果包含了SessionId,则代表服务端已经和客户端创建过Session,然后就通过这个SessionId去查找真正的Session,如果没找到,则为客户端创建一个新的 session,并生成一个新的SessionIdSession对应,然后在响应的时候将SessionId给客户端,通常是存储在Cookie中。如果在请求中找到了真正的Session,验证通过,正常处理该请求。
每一个客户端与服务端连接,服务端都会为该客户端创建一个Session,并将Session的唯一标识SessionId通过设置Set-Cookie头的方式响应给客户端,客户端将SessionId存到Cookie中。

2、流程图

通常情况下,CookieSession都是结合着来用。如下图,具体流程介绍看上面Cookie流程即可。

3、Session和Cookie的区别

CookieSession,它们两者之间主要是通过SessionId关联起来的,所以总结出:SessionIdCookieSession之间的桥梁。

Session是基于Cookie实现的,它们两个主要有以下特点:
1.SessionCookie更加安全,因为它是存在服务端的,Cookie 是存在客户端的。
2.Cookie只支持存储字符串数据,Session可以存储任意数据。
3.Cookie的有效期可以设置较长时间,Session有效期都比较短。
4.Session存储空间很大,Cookie有限制。
系统想要实现鉴权,可以单独使用Cookie,也可以单独使用Session,但是建议结合两者使用

三、token讲解

1、概念

Token是一种在客户端和服务端之间传递身份信息的方式。当用户登录成功后,服务端会生成一个Token,将其发送给客户端。客户端在后续的请求中,需要将Token携带在请求头或请求参数中。服务端通过验证Token的合法性,就可以确定该请求来自哪个用户,并且可以根据用户的权限进行相应的操作。Token可以有效地避免了Cookie的一些安全问题,比如 CSRF 攻击。

2、Token的组成

Token是一个由一串字符组成的令牌,用于在计算机系统中进行身份验证和授权。它通常由三个部分组成:标头、有效载荷、签名
1.标头(Header):包含了算法和类型,用于指定如何对有效载荷进行编码和签名。常用的算法有HMAC、RSA、SHA等。
2.有效载荷(Payload):包含了一些信息,如用户ID、角色、权限等,用于验证身份和授权。有效载荷可以是加密的,也可以是明文的。
3.签名(Signature):是对标头和有效载荷进行签名后得到的值,用于验证token的完整性和真实性。签名通常使用私钥进行签名,并使用公钥进行验证。
一个完整的token包含了标头、有效载荷和签名三个部分,它们一起构成了一个安全的令牌,用于进行身份验证和授权。

3、Token认证流程

1.客户端发起登录请求,比如用户输入用户名和密码后登录。
2.服务端校验用户名和密码后,将用户 id 和一些其它信息进行加密,生成 token。
3.服务端将 token 响应给客户端。
4.客户端收到响应后将 token 存储下来。
5.下一次发送请求后需要将 token 携带上,比如放在请求头中或者其它地方。
6.服务端 token 后校验,校验通过则正常返回数据。

四、三者对比

Token的实现逻辑:

Session+Cookie的实现方案:


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/15 10:36:35

腾讯混元大模型开源:520亿激活参数改写行业效率标准

腾讯混元大模型开源:520亿激活参数改写行业效率标准 【免费下载链接】Tencent-Hunyuan-Large 项目地址: https://ai.gitcode.com/hf_mirrors/tencent/Tencent-Hunyuan-Large 导语 腾讯正式开源混元大模型(Hunyuan-Large)&#xff0c…

作者头像 李华
网站建设 2025/12/15 10:35:45

计算机专业毕业=码农?网络安全正在重塑你的职业天花板

你是否也曾以为,网络安全工程师只是“修防火墙”的幕后英雄? 很多人一提到这个职业,脑海中浮现的就是“敲代码、堵漏洞、防黑客”。 但实际上,网络安全的世界远比这广阔得多——它早已渗透到金融、医疗、能源、政府、军工等各行各…

作者头像 李华
网站建设 2025/12/17 3:21:13

数据处理服务:G1/ZGC如何提升稳定性

文章目录数据处理服务:G1/ZGC如何提升稳定性大对象场景GC风险、批处理Heap布局与实时GC价值深度解析📋 目录📊 一、数据处理服务的JVM挑战💡 数据处理负载特征🎯 数据处理内存特征分析⚖️ 二、G1 vs ZGC:数…

作者头像 李华