Cookie、Session、Token的區別

有人或許還停留在它們只是驗證身份信息的機制,但是它們之間的關系你真的弄懂了么?

發展史:

Coolie:

? ? ? ?Netscape Communications 公司引入了 Cookie 概念,作為在客戶端存儲狀態信息的一種方法。初始目的是為了解決 HTTP 的無狀態性,使網站能夠記住用戶并保持狀態。

Session:

HTTP 1.0 引入了基本的會話管理,通過在請求頭中添加 "Cookie" 字段來傳遞會話標識符。

Token:

? ? ? ?隨著移動應用和 API 的興起,基于 Token 的身份驗證得到了更多關注和應用。OAuth 2.0 的標準化推動了令牌在 web 開發中的應用,支持無狀態的身份驗證和授權。


? ? ? ?在以前,你去登錄一個網站,沒有個人的分別,所以也區不區分也無關緊要,但是隨著互聯網的發展,互聯網越來越重視你是誰?所以cookie就誕生了,它是一個存儲在客戶端的一小段數據,當用戶登錄的時候,由服務端發送給客戶端并存儲在客戶端本地,這樣就可以驗證用戶信息

但是這樣豈不對程序員美滋滋,我們假設有一個小窮(程序員)還有一個老富(頂級富豪)

賬戶轉錢:

老富:

?小窮:

?有一天,小窮通過技術手段搞到了老富的cookie,結果小窮差點吃公家飯?

?

? ? ? ?基于cookie這種不安全性,session逐漸問世,它是一種會話機制,用戶信息存儲在服務器上,這樣就相對于cookie比較安全

?小窮這時候留下了悔恨的眼淚!!!

? ? ? ?但是隨著時代的發展,由于用戶越來越多,一臺服務器已經扛不住了,單體架構逐漸被淘汰,分布式逐漸登上了歷史的舞臺,這時候,問題又來了,由于分布式是采取負載均衡的方式采取服務器請求的,所以我們不能僅限于一臺服務器進行存儲session,總不能每次發送請求的時候都要進行一次身份驗證,那么當時就有兩種情況可以解決這個問題:

1.單獨拎出來一個服務器,專門作為session的驗證

2.在每個服務器上都存儲一份session

? ? ? ?這兩種方式顯然對資源的一種浪費,數以千萬計的用戶的session占用的內存可不是一個小數目,所以我們的下一個主角又登場了——Token

? ? ? ? ?Token是一種輕量級的身份驗證和授權機制,一般是一小段字符串,當每次用戶成功登錄或請求時,服務器會生成一個Token(用戶ID、角色、權限以及一些元數據),通過使用密鑰對其進行加密和簽名確保安全性,下一次客戶端訪問時攜帶Token,服務器用相同的密鑰進行解密和檢驗簽名,確保安全性

?使用Token的效果既保障了安全問題又避免了資源浪費

?Token的優點真的數不勝數,列幾點:

  • 安全性:經過了層層加密(加密和簽名)確保完整性和安全性
  • 無狀態:服務器不需要在本地存儲會話數據,不需要維護會話狀態,更加容易擴展與分布式部署
  • 跨域支持:Token可以通過HTTP請求頭、URL參數或者Cookie發送
  • 靈活性:攜帶自定義的用戶信息
  • 性能:無需服務器存儲和查詢會話狀態,提供服務器的性能和響應速度
  • 輕量級:比傳統的會話更加輕量級(不需要在服務器上存儲狀態信息)
  • 可擴展性:方便的擴展以及適應不同的需求
  • 單點登錄:登錄一次訪問多個關聯應用
  • 可移植性:不依賴于特定的編程語言

Cookie:

? ? ? ?Cookie是存儲在用戶瀏覽器中的小段數據,由服務器發送給客戶端并存儲在客戶端本地。它通常用于持久性存儲一些用戶相關的信息,如登錄憑證、用戶偏好設置等,Cookie可以設置過期時間,可以是會話級別的(在用戶關閉瀏覽器后過期)或者是長期的(設置特定的過期時間),由于存儲在客戶端,Cookie可以在用戶訪問不同頁面時被瀏覽器自動發送到服務器

Session:

? ? ? ?會話是一種服務器機制,用于跟蹤用戶在網站上的活動,服務器在用戶訪問網站時為每個用戶創建一個唯一的會話標識(Session ID),這個標識存儲在Cookie中或者通過URL參數傳遞,然后,服務器可以根據會話標識來識別特定的用戶,并在服務器端存儲用戶狀態信息,以便跟蹤用戶的狀態和數據,會話數據通常在服務器上存儲,因此相對安全

Token:

? ? ? ?Token是一種輕量級的身份驗證和授權機制,廣泛用于構建于API的 應用和單點登錄系統,用戶登錄后,服務器會頒發一個Token,包含有關用戶身份的信息和一些元數據,這個Token被用戶保存,并在每次向服務器發送請求時隨請求一起發送,服務器可以驗證Token的有效性,并根據Token中的信息執行身份驗證和授權,Token可以是短期的,也可以是長期的,但是為了安全性通常會有過期時間

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36972.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36972.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36972.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲:單線程、多線程、多進程

前言 在使用爬蟲爬取數據的時候,當需要爬取的數據量比較大,且急需很快獲取到數據的時候,可以考慮將單線程的爬蟲寫成多線程的爬蟲。下面來學習一些它的基礎知識和代碼編寫方法。 一、進程和線程 進程可以理解為是正在運行的程序的實例。進…

python爬蟲數據解析xpath、jsonpath,bs4

數據的解析 解析數據的方式大概有三種 xpathJsonPathBeautifulSoup xpath 安裝xpath插件 打開谷歌瀏覽器擴展程序,打開開發者模式,拖入插件,重啟瀏覽器,ctrlshiftx,打開插件頁面 安裝lxml庫 安裝在python環境中的Scri…

劍指Offer61.撲克牌中的順子 C++

1、題目描述 從若干副撲克牌中隨機抽 5 張牌,判斷是不是一個順子,即這5張牌是不是連續的。2~10為數字本身,A為1,J為11,Q為12,K為13,而大、小王為 0 ,可以看成任意數字。…

并發服務器模型,多線程并發

一、多線程并發完整代碼 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> #include <…

突然讓做性能測試?試試RunnerGo

當前&#xff0c;性能測試已經是一名軟件測試工程師必須要了解&#xff0c;甚至熟練使用的一項技能了&#xff0c;在工作時可能每次發版都要跑一遍性能&#xff0c;跑一遍自動化。性能測試入門容易&#xff0c;深入則需要太多的知識量&#xff0c;今天這篇文章給大家帶來&#…

Rocky Linux更換為國內源

Rocky Linux提供的可供切換的源列表&#xff1a;Mirrors - Mirror Manager 其中以 COUNTRY 列為 CN 的是國內源。 選擇其中一個Rocky Linux 源使用幫助 — USTC Mirror Help 文檔 操作前請做好備份 對于 Rocky Linux 8&#xff0c;使用以下命令替換默認的配置 sed -e s|^mirr…

新能源汽車電控系統

新能源汽車電控系統主要分為&#xff1a;三電系統電控系統、高壓系統電控系統、低壓系統電控系統 三電系統電控系統 包括整車控制器、電池管理系統、驅動電機控制器等。 整車控制器VCU 整車控制器作為電動汽車中央控制單元&#xff0c;是整個控制系統的核心&#xff0c;也是…

zabbix監控mysql數據庫、nginx、Tomcat

zabbix監控mysql數據庫、nginx、Tomcat 一.zabbix監控mysql數據庫 1.環境規劃 hostIP部署zabbix-server192.168.198.17zabbix服務器搭建zabbix-mysql192.168.198.15zabbix客戶端搭建 2.zabbix-server安裝部署&#xff08;192.168.198.17&#xff09; 請參考以下配置&#…

Azure概念介紹

云計算定義 云計算是一種使用網絡進行存儲和處理數據的計算方式。它通過將數據和應用程序存儲在云端服務器上&#xff0c;使用戶能夠通過互聯網訪問和使用這些資源&#xff0c;而無需依賴于本地硬件和軟件。 發展歷史 云計算的概念最早可以追溯到20世紀60年代的時候&#x…

mysql 分庫分表淺析

分表是分散數據庫壓力的好方法。 分表&#xff0c;最直白的意思&#xff0c;就是將一個表結構分為多個表&#xff0c;然后&#xff0c;可以再同一個庫里&#xff0c;也可以放到不同的庫。 當然&#xff0c;首先要知道什么情況下&#xff0c;才需要分表。個人覺得單表記錄條數達…

2023河南萌新聯賽第(五)場:鄭州輕工業大學C-數位dp

鏈接&#xff1a;登錄—專業IT筆試面試備考平臺_牛客網 給定一個正整數 n&#xff0c;你可以對 n 進行任意次&#xff08;包括零次&#xff09;如下操作&#xff1a; 選擇 n 上的某一數位&#xff0c;將其刪去&#xff0c;剩下的左右部分合并。例如 123&#xff0c;你可以選擇…

年至年的選擇仿elementui的樣式

組件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 時間選擇年 - 年 --> <template><div class"yearPicker"…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一個現代 Vanilla JS 和 ES6 庫以及下一代前端框架。企業級 Web 組件包括輔助功能&#xff08;WAI-ARIA、第 508 節/WCAG 合規性&#xff09;、本地化、從右到左鍵盤導航和主題。與 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

九、多態(2)

本章概要 構造器和多態 構造器調用順序繼承和清理構造器內部多態方法的行為 協變返回類型使用繼承設計 替代 vs 擴展向下轉型與運行時類型信息 構造器和多態 通常&#xff0c;構造器不同于其他類型的方法。在涉及多態時也是如此。盡管構造器不具有多態性&#xff08;事實上…

【JavaScript】new 的原理以及實現

網道 - new 命令的原理 使用new命令時&#xff0c;它后面的函數依次執行下面的步驟。 創建一個空對象&#xff0c;作為將要返回的對象實例。將這個空對象的原型&#xff0c;指向構造函數的prototype屬性。將這個空對象賦值給函數內部的this關鍵字。如果構造函數返回了一個對象…

版本動態 | SolidUI 0.2.0 版本發布

SolidUI 一句話生成任何圖形 背景 隨著文本生成圖像的語言模型興起&#xff0c;SolidUI想幫人們快速構建可視化工具&#xff0c;可視化內容包括2D,3D,3D場景&#xff0c;從而快速構三維數據演示場景。SolidUI 是一個創新的項目&#xff0c;旨在將自然語言處理&#xff08;NLP&…

[SpringCloud] 組件性能優化技巧

Feign 配置優化hystrix配置 優化ribbon 優化Servlet 容器 優化Zuul配置 優化 文章目錄 1.Servlet 容器 優化2.Feign 配置優化3.Zuul配置 優化4.hystrix配置 優化5.ribbon 優化 1.Servlet 容器 優化 默認情況下, Spring Boot 使用 Tomcat 來作為內嵌的 Servlet 容器, 可以將 We…

在Visual Studio上,使用OpenCV實現人臉識別

1. 環境與說明 本文介紹了如何在Visual Studio上&#xff0c;使用OpenCV來實現人臉識別的功能 環境說明 : 操作系統 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社區版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 實現效果如圖所示&#xff0…

Linux命令200例:adduser用于創建新用戶

&#x1f3c6;作者簡介&#xff0c;黑夜開發者&#xff0c;全棧領域新星創作者?。CSDN專家博主&#xff0c;阿里云社區專家博主&#xff0c;2023年6月csdn上海賽道top4。 &#x1f3c6;數年電商行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &…

代理模式【Proxy Pattern】

什么是代理模式呢&#xff1f;我很忙&#xff0c;忙的沒空理你&#xff0c;那你要找我呢就先找我的代理人吧&#xff0c;那代理人總要知道 被代理人能做哪些事情不能做哪些事情吧&#xff0c;那就是兩個人具備同一個接口&#xff0c;代理人雖然不能干活&#xff0c;但是被 代…