【HTTP服務端】Cookie?Session?Token?

文章目錄

  • cookie與session
  • token
    • 什么是JWT?
    • JWT的組成結構
      • 1. Header(頭部)
      • 2. Payload(負載)
      • 3. Signature(簽名)
    • JWT工作原理
    • JWT的特點
    • 安全注意事項

cookie與session

cookie有哪些屬性

  1. 鍵值對(必需)
  • name=value:Cookie 的核心內容,如 session_id=12345
  1. 作用域控制
  • Domain:指定 Cookie 可被發送到的域名(如 Domain=example.com),子域名默認繼承。
  • Path:指定 Cookie 可被發送到的路徑(如 Path=/api),子路徑默認繼承。
  1. 有效期
  • Expires:指定 Cookie 的具體過期時間(如 Expires=Wed, 21 Oct 2025 07:28:00 GMT)。
  • Max-Age:指定 Cookie 的有效秒數(如 Max-Age=3600 表示 1 小時后過期)。
  1. 安全屬性
  • Secure:僅在 HTTPS 連接下發送 Cookie。
  • HttpOnly:禁止 JavaScript 訪問 Cookie(防 XSS 攻擊)。
  • SameSite:控制跨站請求時 Cookie 的發送策略:
    • Strict:僅允許同源請求攜帶 Cookie。
    • Lax:允許部分安全的跨站請求(如鏈接跳轉)。
    • None:允許所有跨站請求(需配合 Secure 屬性)。
  1. 其他
  • Priority(Chrome 特有):指定 Cookie 的優先級(Low/Medium/High)。
  • Partitioned(實驗性):隔離不同站點的 Cookie 存儲(防跨站追蹤)。

示例

Set-Cookie: session_id=12345; Domain=example.com; Path=/; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Secure; HttpOnly; SameSite=Lax

cookie原理

http客戶端向服務端發請求,服務端通過http響應返回給客戶端如usrname=xxx pswd=xxx,客戶端在后續請求中攜帶該字段,從而讓服務端識別。

從安全性等角度演變為session

http客戶端向服務端發請求,服務端針對該客戶端生成一個唯一標識,通過http響應返回給客戶端,客戶端在后續請求中攜帶該字段,從而讓服務端識別。【該唯一標識sessionid通常是一個“數據”的標識,該“數據”存儲了該用戶的信息,該sessionid通常存在redis集群,不同服務器在負載均衡時去redis查】

該唯一標識的內容設成什么?

服務端可以根據用戶名和密碼和一些環境信息基于某種算法生成

該值保存在哪

保存在客戶端,分為內存級【會話關閉cookie消失】和磁盤級【cookie過期后消失】

如何實現會話管理?服務端需要存儲哪些信息?

  1. 服務端對于客戶端發來cookie的value,將value和用戶的唯一標識如user_id建立映射,從而可以獲取該用戶相關信息如用戶登錄狀態,用戶權限信息,用戶登陸ip,用戶使用設備,用戶臨時上下文(瀏覽部分,購物車臨時數據)
  2. 其他信息:會話創建,過期,活躍時間;

token

為防止客戶端發送的session id被偽造,需對其合法性進行驗證。可采用令牌(token)機制,在用戶登錄后發放包含其user id的token,用戶后續請求時通過Http header攜帶該token。為避免偽造,用HMAC-SHA256算法結合僅服務端知曉的密鑰對數據簽名,將簽名與數據一同作為token,因密鑰保密,他人無法偽造。服務端不保存token,接收后用相同算法和密鑰重新計算簽名并與token中的簽名比對,相同則確認用戶合法登錄并獲取user id,不同則判定數據被篡改。需注意,token數據經Base64編碼(非加密),明文可見,不可包含密碼等敏感信息,且token被盜與session id被盜風險類似。這種不保存session id僅生成和驗證token的無狀態機制,能減輕服務器存儲負擔,便于機器集群水平擴展。【token解決了服務端需要存儲大量的sessionid造成的空間成本,通過token中的user_id直接去數據庫查詢用戶相關信息】

什么是JWT?

JWT(JSON Web Token)是一種開放標準(RFC 7519),用于在網絡應用環境間安全地傳輸聲明(claims)作為JSON對象。它通常用于身份驗證和信息交換。

JWT的組成結構

一個JWT由三部分組成,用點號(.)分隔:

Header.Payload.Signature

1. Header(頭部)

包含令牌類型(typ)和簽名算法(alg),例如:

{"alg": "HS256","typ": "JWT"
}

2. Payload(負載)

包含聲明(claims),聲明是關于實體(通常是用戶)和其他數據的語句。有三種類型的聲明:

  • 注冊聲明(預定義):如iss(簽發者)、exp(過期時間)、sub(主題)等
  • 公共聲明:可以自定義,但應避免與已注冊聲明沖突
  • 私有聲明:用于在同意使用它們的各方之間共享信息

示例:

{"sub": "1234567890","name": "John Doe","admin": true,"iat": 1516239022
}

3. Signature(簽名)

使用編碼后的header、payload、一個密鑰和header中指定的算法生成。例如使用HMAC SHA256算法:

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

JWT工作原理

  1. 認證流程

    • 用戶登錄,服務器驗證憑證
    • 服務器創建JWT并返回給客戶端
    • 客戶端存儲JWT(通常在localStorage或cookie中)
    • 客戶端在后續請求的Authorization頭中攜帶JWT
    • 服務器驗證JWT并處理請求
  2. 驗證過程

    • 服務器收到JWT后,會重新計算簽名
    • 比較計算的簽名與JWT中的簽名是否一致
    • 驗證過期時間等聲明

JWT的特點

  • 無狀態:服務器不需要存儲會話信息
  • 可驗證:簽名確保令牌未被篡改
  • 包含信息:payload可以包含用戶基本信息
  • 跨域友好:適合單點登錄和分布式系統

安全注意事項

  • 不要將敏感信息放入JWT(除非加密)
  • 使用HTTPS傳輸
  • 設置合理的過期時間
  • 考慮使用刷新令牌機制
  • 防范CSRF攻擊(如果存儲在cookie中)

JWT是現代Web應用和API中廣泛使用的身份驗證機制,特別適合RESTful API和無狀態服務架構。

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

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

相關文章

安裝Git

Git安裝避坑指南技術 操作系統選擇與準備 Windows用戶需注意系統版本兼容性,建議使用Windows 10及以上版本 Mac用戶需檢查是否安裝Xcode Command Line Tools Linux用戶需區分apt/yum等包管理器命令差異 安裝包下載注意事項 從官方渠道(git-scm.com&a…

UDP服務器的優缺點都包含哪些?

UDP協議不需要像TCP協議那樣進行復雜的連接建立與拆除過程,在進行傳輸數據信息的過程中,應用層將數據交給UDP層,UDP層直接加上首部就發往網絡層,極大地減少了處理時間和資源消耗。例如在一些簡單的網絡監控程序中,只是…

sqli-labs靶場通關筆記:第7-8關 布爾盲注

第七關1.審題這里判斷出是))閉合,但是頁面只有正確和錯誤的回顯狀態,報錯的回顯也是固定的,沒有顯示報錯具體信息。這關使用的方法是布爾盲注。為什么叫布爾盲注?因為它返回的結果只有true和false 兩個值,攻擊者需要通…

理解支持向量機(SVM):理論、數學和實現的綜合指南

支持向量機(SVMs)是強大的監督學習算法,用于分類和回歸任務,盡管它們主要用于分類。由Vladimir Vapnik及其同事在1990年代引入,SVMs基于統計學習理論,特別適用于需要將數據點穩健分離到不同類別的任務。本博…

使用Navicat對PostgreSQL數據表添加列,自動記錄當前行的添加日期

點開表設計,向如下這樣一個字段: 字段名稱可以自定義,博主這里叫做:add_date_time類型選擇:timestamp長度寫成:6默認值輸入:CURRENT_TIMESTAMP 添加行:默認值:

VR協作海外云:跨國企業沉浸式辦公解決方案

隨著全球化進程加速,VR協作海外云正成為跨國企業數字化轉型的核心解決方案。本文將深入解析這項技術如何突破地理限制,實現沉浸式遠程協作,并探討其在跨文化團隊管理、實時3D數據交互等場景中的獨特優勢。 VR協作海外云:跨國企業沉…

[ESP32]VSCODE+ESP-IDF環境搭建及blink例程嘗試(win10 win11均配置成功)

ps:這是你為了點燈最繁瑣的一次 1.軟件下載 vscode下載地址:Documentation for Visual Studio Codeesp_idf下載地址:https://dl.espressif.cn/dl/esp-idf/?idf4.4 (從上往下第三) 2.軟件安裝 可以均默認安裝,但建議不要放在C盤&…

tailwindcss詳解

Tailwind CSS 詳解:實用主義的現代 CSS 框架 Tailwind CSS 是一個功能優先(utility-first)的 CSS 框架,它通過提供低級別的實用類來快速構建自定義設計,而無需離開 HTML 文件。以下是全面解析: 一、核心概念…

[spring6: TypeFilter MetadataReader MetadataReaderFactory]-源碼解析

源碼 MetadataReaderFactory MetadataReaderFactory 是用于創建 MetadataReader 實例的工廠接口,支持通過類名或資源讀取類的元數據并可實現緩存優化。類型類/接口名功能描述是否需要加載類訪問方式抽象接口AnnotatedTypeMetadata訪問某類型(類或方法&am…

基于redis的分布式session共享管理之銷毀事件不生效問題

一、前言首先介紹下分布式session共享管理在Springboot項目中,經常提到分布式的概念,當實際部署應用后,多臺服務器各自存儲用戶登錄會話無法共享,導致操作A按鈕還是正常,操作B按鈕就提示登錄過期需要重新登錄。這是因為…

技術面試問題總結二

一、lvs的四種工作模式: LVS 有四種主要工作模式:NAT 模式、DR 模式、TUN 模式和Full-NAT 模式 1、NAT模式: 工作原理 LVS 作為客戶端和真實服務器(RS)之間的中間節點,接收客戶端請求后,修改請求的目標…

軟考(軟件設計師)軟件工程-軟件過程模型,敏捷開發

軟件過程模型 瀑布模型 #mermaid-svg-daxck2eQmqfYelkV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-daxck2eQmqfYelkV .error-icon{fill:#552222;}#mermaid-svg-daxck2eQmqfYelkV .error-text{fill:#552222;stro…

MySQL 中圖標字符存儲問題探究:成因、解決方案及單字段編碼調整的利弊分析——仙盟創夢IDE

在 MySQL 數據庫應用中,常出現無法正確保存圖標字符,讀出時顯示為 “????” 的問題。本文深入剖析了該問題產生的原因,主要涉及字符編碼設置不匹配等因素。同時,提出了全面的解決方案,包括全局和單字段的字符編碼調…

快速上手UniApp(適用于有Vue3基礎的)

作為一位有Vue3基礎的開發者,學習UniApp將會是一個相對平滑的過程。UniApp是一個使用Vue.js開發跨平臺應用的前端框架,可以編譯到iOS、Android、H5以及各種小程序平臺。 一、UniApp簡介 UniApp是基于Vue.js的跨平臺開發框架,具有以下特點&a…

background和background-color的區別

前言:由于全局切換變量時,發現空頁面按鈕變量顏色未生效,審查元素發現變量未定義。實際上是背景色由純色變成了漸變色,而background-color不支持漸變色導致變量不生效特性backgroundbackground-color功能設置?所有?背景屬性&…

Vue Vue-route (5)

Vue 漸進式JavaScript 框架 基于Vue2的學習筆記 - Vue-route History模式和路由懶加載 目錄 History模式 設置history模式 后端配置 Apache 路由懶加載 配置 總結 History模式 設置history模式 Vue-route默認hash模式——使用URL的hash來模擬一個完整的URL&#xff0c…

家用智能攝像機PRV文件刪除的恢復方法

家用智能攝像頭一般采用的是mp4或者mov視頻方案,這一類方案文件通用性強、使用簡單,以MP4為例無論是APP在線播放還是TF卡接電腦查看都很輕松。即便如此,有些廠商還是走上了“自定義”的道路,自定義的文件結構導致無法正常播放&…

聊下easyexcel導出

直接上干貨&#xff0c;首先pom文件引入依賴 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency>接下來是java代碼 public void export(List<Liquidity…

[Python] Flask 多線程繪圖時報錯“main thread is not in main loop”的解決方案

在構建基于 Flask 的后端服務過程中,使用 matplotlib 繪圖時,很多開發者會遇到一個經典的運行時錯誤: RuntimeError: main thread is not in main loop這通常出現在服務開啟多線程時調用 matplotlib,本文將從原理、解決方式到部署建議進行全面解析。 一、問題來源:matpl…

dbEaver連接hbase,各種問題的終極解決

網上有不少文章&#xff0c;但基本都不行&#xff0c;主要還是hbase版本和phoenix版本的問題&#xff0c;經我測試&#xff0c;如下方法保證能連接成功。 1、下載phoenix: https://phoenix.apache.org/download.html 要選擇和你的hbase版本對應的版本。 2、解壓phoenix-hbase-2…