IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Cookie、Session与Token的区别 -> 正文阅读

[网络协议]Cookie、Session与Token的区别

目录:

  • Cookie
  • Session
  • Token
  • 对称/非对称加密
  • Storage

HTTP 协议是无状态的,因此想要实现保存用户数据或辨别用户身份就要使用今天所要说的内容。

cookie:

Cookie已经在前面说过,Cookie是保存在客户端的一个文本文件。

但仅通过cookie就可以辨别用户了吗?
显然是不行的,因为它保存在客户端,可以被人修改绕过验证。

document.cookie = "status=" +"true";

当浏览器发送请求时,cookie就会被发送。

Session:

对于服务器而言,可以将会话以key-value的形式储存到服务器,当客户端发送请求时以种cookie的方式将key发送到客户端。客户端收到后将key保存到cookie中的sessionID中。
当下一次客户端发送请求时,再将cookie带上,将sessionID和服务器的value验证。

这确实是一个非常好的方案,但它的弊端是占用空间,当用户数量越来越多,随之储存的数据也越来越多。

因此,Cookie和Session的区别在于储存在服务器还是客户端

Token:

经过CookieSession后我们知道,前者不安全,后者占内存。而Token的出现就解决了这个问题。

由于Token是无状态的,所以不需要储存信息,解决了Session的问题;通过签名加密,解决了Cookie不安全的问题。

JSON Web Token简称JWT,它以JSON的形式储存,结构有三部分:

  • 头部(Header):储存类型和加密算法
  • 负载(payload):需要储存的信息
  • 签名(signature):将头部和负载加密

使用Token时,服务器向浏览器发送一个通过私钥生成Token,客户端收到加密的Token将其保存。每次发送请求时带上Token。服务器收到请求使用公钥解密验证。

上面我们明白了Token的优势以及传输方式,那公钥和私钥从哪里来的呢?

对称加密&非对称加密:

这里涉及到加密算法中的对称加密和非对称加密。而Token使用的签名就是非对称加密。

对称加密:

对称加密也叫私钥加密,加密解密过程如下:

  • 通过私钥对明文进行加密,输出密文。
  • 通过私钥读密文进行解密,输出明文。

对称加密速度较快,但由于双方使用同一个密钥,安全性一般。

非对称加密:

采用公钥-私钥的方式进行加密。而且只有同一个公钥-密钥才可以正常加密解密。加密解密过程如下:

  • 获取公钥对明文进行加密,输出密钥。
  • 使用对应的私钥对密文进行解密,输出明文。

公钥是私有的,保证了信息是从唯一的位置发送;公钥是公开的,只有公钥才能解密。因此公钥用来签名,私钥用来验证签名。
由于非对称加密需要协商加密,因此速度比对称加密慢得多,但安全性较好。

解决了加密的问题,那客户端接收到的Token应该保存在哪里?

Web Storage

这两个概念是HTML5中被提出,提供除Cookie之外的在客户端储存数据的途径。其中分类两类:

  • localStorage:永久保存,只有手动删除时才清除,且在同源窗口共享。
  • sessionStorage:浏览器或页面关闭时清除。

区别于Cookie

异同CookielocalStoragesessionStorage
大小4kb5M5M
通信携带在HTTP请求内仅存储在客户端仅存储在客户端
生命周期默认关闭浏览器失效永久保存,只能手动清除关闭浏览器失效

无论使用以上哪种方式存储信息,都要注意XSS攻击。

更多内容请看:IFTS

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 15:11:52  更:2021-10-24 15:12:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:22:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码