浅谈对cookie、session和token的理解
一、Cookie
1.什么是cookie
原理图
说明:
1.浏览器第一次发送请求到服务端
2.服务器响应结果的同时也返回了一些数据也就是cookie给浏览器。
3.浏览器读取cookie并存储,当再次发起访问请求的时候携带上cookie。
4.服务器检查了cookie可以识别身份,响应结果。
2.为什么需要cookie
因为Web传输是通过HTTP协议,而HTTP协议是无状态协议。
无状态协议就是客户端是不保存数据的。如果后续的操作需要用到之前的数据,就需要重新传输数据,这样就很麻烦。
而cookie的出现就可以保存这些数据。
3.cookie的保存方式
1.浏览器将cookie存储在内存中。
2.保存在客户端的硬盘。
4.cookie的优缺点
优点
- cookie可以实现跨页面全局变量,同一个网站中所有的页面可以共享一套cookie。
- 通过加密和安全传输技术(SSL),减少cookie被破解的可能性
- 数据持久性。
- 简单性。cookie是一种基于文本的轻量结构,包含简单的键值对,结构简单。
缺点
- cookie可能被禁用。
- cookie与浏览器相关,不能互相访问。
- cookie可能被用户删除。
- cookie安全性不够高,有可能会被篡改。
- cookie存储空间很小。
二、Session
1.什么是session
Session是另一种记录客户状态的机制,不同的是Cookie保存在浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以Session的方式记录在服务器上。当客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。Session是一种特殊的cookie。Cookie是保存在客户端的,而Session是保存在服务端的。
原理图
说明:
1.客户端第一次请求服务器时,服务器生成一份session保存在服务器。
2.服务器将该session的id以cookie的形式传递给客户端。
3.浏览器读取cookie并存储,当再次发起访问请求的时候携带上cookie。
4.服务器检查了cookie可以识别身份,响应结果。
2.为什么要用session
因为cookie存在于客户端,用户可以看到并且可以随意修改,安全性较低。并且cookie的存储大小也有限。
而session存储在服务端,信息安全性较高。
3.session的优缺点
优点
- 信息存储在服务端非常安全,客户端拿不到session的数据
- 易于读写、易于站点的用户化。
缺点
- 会占用服务器的资源,session的文件越来越多,有一天就会占满磁盘。
- 依托性。如果某用户将浏览器设置为不兼容任何的cookie,那么该用户就无法使用这个session变量。
三、cookie和session的共同点以及区别
共同点
- 两者都是用来记录用户的状态。(保存用户的登录态)
区别
- cookie是存储在客户端的,而session是存储在服务器端的。
- cookie有大小限制
- session更加安全
- session会比较占用服务器性能,当访问增多时应用cookie。
- cookie只支持字符串数据,而session可以存放任意数据类型。
四、token
1.什么是token
token存在于客户端,但它是服务器端发回来的,每次请求都需要携带token,把token放到HTTP的Header中,基于token的用户认证是一种服务端无状态的认证方式,服务端不用存放token的数据,用解析token的时间换取session的存储空间、可以减轻服务器的压力,减少频繁查询数据库,token完全由应用管理,避开同源策略。
原理图
说明:
1.登录提交用户名和密码
2.服务器端验证并返回响应结果,通过则生成该用户的token并且返回。
3.将token存放在客户端,后续所有请求都带上它。
2.token和session的区别
- session是一种记录服务器和客户端会话状态的机制,使服务端由状态化。而token是令牌,访问资源接口(API)时所需要的认证资源,token使服务器无状态化,不会存储会话信息。
- session和token并不矛盾,作为身份认证token比session安全性更好,因为每一个请求都有签名,还能防止监听以及重击攻击,而session就必须依赖链路层来确保通讯安全了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)