当前位置:网站首页>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是无状态的。
边栏推荐
- powershell 执行策略
- 30 范数
- Redis的过期策略和淘汰策略
- Embedded system driver advanced [3] - __ID matching and device tree matching under platform bus driver development
- 作为常用的荧光标记试剂Cy5 亚磷酰胺(CAS号:182873-67-2)有哪些特点了?
- "The Sword Offer" Problem Solution - week1 (continuously updated)
- Second data CEO CAI data warming invited to jointly organize the acceleration data elements online salon
- Leetcode Brushing Questions - 148. Sort Linked List
- powershell execution strategy
- Oracle并行检索
猜你喜欢

Talk about those marketing tools - coupons

5.索引优化实战

作为常用的荧光标记试剂Cy5 亚磷酰胺(CAS号:182873-67-2)有哪些特点了?

2022-08-08 The fifth group Gu Xiangquan study notes day31-collection-IO stream-File class

VMware不正常关机

Mysql表打不开

创建一个DAPP的全流程

365 days challenge LeetCode1000 topic - Day 051 special binary sequence partition

ARM开发(二)ARM体系结构——ARM,数据和指令类型,处理器工作模式,寄存器,状态寄存器,流水线,指令集,汇编小练习题

2021-07-21
随机推荐
通过kvm创建共享磁盘
opencv学习入门
Cholesterol-PEG-Maleimide,CLS-PEG-MAL,胆固醇-聚乙二醇-马来酰亚胺用于科研实验
多商户商城系统功能拆解23讲-平台端分销等级
Chapter2多元函数
【CAS:41994-02-9 |Biotinyl Tyramide|】生物素基酪氨酰胺
06 动态内存
剑指 Offer 56 - I. 数组中数字出现的次数
EventLoop同步异步,宏任务微任务笔记
智能计数器控制板的功能及应用有哪些?
365天挑战LeetCode1000题——Day 051 特殊的二进制序列 分治
leetcode 2021春季挑战赛 1. 采购方案
以赛促练-力扣第84场双周赛反思以及第305场周赛补题
30 范数
交换VLAN实验
uniapp uview uselect 时间选择 日期生成代码
Deep learning - in the recognition, for example, this paper discusses how to preserve the neural network model
static成员及代码块
BigDecimal 详解
33 基本统计知识——单项非参数检验