当前位置:网站首页>Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
2022-08-09 03:33:00 【51CTO】
HTTP是一个没有状态的协议,这种特点带来的好处就是效率较高,但是缺点也非常明显,这个协议本身是不支持网站的关联的,比如https://ceshiren.com/和https://ceshiren.com/t/topic/9737/7这两个网站,必须要使用别的方法将它们两个关联起来。那就是session 、cookie 、token。
- session 即会话,是一种持久网络协议,起到了在用户端和服务器端创建关联,从而交换数据包的作用。
- cookie 是“小型文本文件”,是某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
- token 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。
演示环境搭建
与 get、post 区别实战详解 章节相同,为了避免其他因素的干扰,使用 Flask 编写一个简单的 demo server(Flask 的安装与启动参考 get、post 区别实战详解 章节),来演示 cookie 与 session。
demo server 演示代码
分析 session、cookie、token
session、cookie 区别演示
首先使用浏览器的无痕模式对演示网站发起访问,并传入 a、b 两个参数 以一次请求为例,查看 cookie 的传递过程
第一次请求的请求头信息如下,可以看到没有任何的 cookie 信息:
第一次请求的响应头信息,对客户端返回了 set-cookie 字段:
第二次请求的请求头信息,客户端向服务端请求时请求头多出了一个 cookie 信息,并提交了和第二次 set-cookie 相同的信息:
当用户访问带 cookie 浏览器时,这个服务器就为这个用户产生了唯一的 cookie,并以此作为索引在服务器的后端数据库产生一个项目,接着就给客户端的响应报文中添加一个叫做 Set-cookie 的首部行,格式为 k:v。
这样当该用户下次再访问此网站时,就会在对服务器发起请求的时候添加一个名 Cookie 的首部行。浏览器由此就可以得知用户的身份,从而用户就不需要再次重新输入一些个人信息。
使用 curl 命令对网站发起了一个 get 请求,并传入 a、b 两个参数
查看 session 文件内的请求以及响应内容
从上面可以发现,与上一章节内容不同的是响应值多出了 3 个Set-Cookie字段。下面有一个Set-Cookie显示为session=eyJhIjoiMSIsImIiOiIyIn0.EWX6Qg.M8tEGPyRhlf0iUiLktEqup-4e-U; HttpOnly; Path=/,由此可见 session 一般是加密串格式,可以通过 cookie 传递。
token 演示
token 的使用有一个非常经典的场景,就是在 github 中的使用。在 github->settings->Developer settings->Personal access tokens 中,可以生成一个 token 用于访问 github 的 api,这个 token 是没有时效性的,“任何人”可以使用它们代替通过 HTTPS 的 Git 密码,也可以用来通过基本身份验证向 API 进行身份验证。
使用 OAuth 令牌对 GitHub API 进行身份验证(因返回结果个人信息太多所以省略展示)
token是无状态的,客户端传递用户数据给服务端后,服务端将数据加密就生成了token并传回给客户端。这样客户端每次访问时都传递token,而服务端解密token之后,即可了解客户的信息。
在 github 中,token 只会生成一次,且不会过期,不过在很多其他的 web 应用网站,token 会存在过期机制。
session、cookie、token 的区别
- session 存储在服务器端,cookie 存储在客户端。
- cookie 可设置为长时间保持,session 一般失效时间较短,客户端关闭(默认情况下)或者 session 超时都会失效。
- session记录会话信息,token不会记录会话信息。token是无状态的。
边栏推荐
- Talk about those marketing tools - coupons
- DSPE-PEG-OH,DSPE-PEG-Hydroxyl,磷脂-聚乙二醇-羟基仅供科研实验使用
- BigDecimal 详解
- MKNetworkKit更换域名时错误解决方法
- 作为常用的荧光标记试剂Cy5 亚磷酰胺(CAS号:182873-67-2)有哪些特点了?
- 项目中'说到做不到'的个人分析
- VS2019 compiles boost_1_79, generates 32-bit and 64-bit static libraries
- Chapter2多元函数
- Cholesterol-PEG-Maleimide,CLS-PEG-MAL,胆固醇-聚乙二醇-马来酰亚胺用于科研实验
- 数组与切片
猜你喜欢
随机推荐
项目中'说到做不到'的个人分析
[Network Tutorial] IPtables Official Tutorial - Study Notes 3
net core 读取sqlserver所有表转为json
leetcode 2021春季挑战赛 1. 采购方案
项目管理-挣值分析方法学习总结
通过kvm创建共享磁盘
opencv学习入门
动态规划之换硬币
当IDEA罢工时
Image.new() 及 img.paste() 的用法记录
33 基本统计知识——单项非参数检验
多商户商城系统功能拆解23讲-平台端分销等级
static成员及代码块
31 基本统计概念
Oracle并行检索
leetcode 5709. 最大升序子数组和
Embedded system driver advanced [2] - platform bus driver development _ basic framework
SQL注入(2)
pytorch 自定义dataset
深度学习:优化器









