Java-servlet(九)前端會話,會話管理與Cookie和HttpSession全解析

Java-servlet(九)前端會話,會話管理與Cookie和HttpSession全解析

  • 前言
    • 一、什么是會話
    • 二、會話管理
      • 1. 隱藏的表單域
      • 2. 網址重寫
      • 3. 使用 Cookie
        • 3.1 Cookie 的工作流程
        • 3.2 Java 中的方法,Cookie 類
    • 三、Cookie 的實現
      • 1. 創建 Cookie
      • 2. 添加 Cookie
      • 3. 讀取 Cookie
    • 四、實現 HttpSession
    • 五、處理錯誤
      • 1. 發送錯誤
      • 2. 自定義錯誤頁面


前言

  • 在 Web 開發中,會話管理是實現用戶狀態跟蹤的核心技術
  • 想象一個場景:用戶登錄網站后添加商品到購物車,切換頁面時購物車數據需要保持;用戶退出后,系統需清除其相關狀態。
  • 這些需求都依賴會話管理技術實現
  • 本文將從會話基本概念入手,逐步解析四種主流會話管理方案隱藏表單域、URL 重寫、Cookie 和 HttpSession,通過對比分析幫助你選擇最合適的技術方案

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482


在這里插入圖片描述

一、什么是會話

會話是指在一段時間內,用戶與應用程序之間的交互過程

  • 在 Web 應用中,會話可以理解為用戶從打開瀏覽器訪問網站開始,到關閉瀏覽器結束的整個過程

以購物車為例,當用戶在電商網站上挑選商品并添加到購物車時,這個過程就涉及到會話管理。網站需要識別是哪個用戶在操作購物車,并且在用戶的整個購物過程中保存購物車中的商品信息,直到用戶完成購物或者關閉瀏覽器

二、會話管理

會話管理的目的是在多個請求之間跟蹤用戶的狀態。下面介紹幾種將 useridservlet2 傳到 servlet3 的方法:

1. 隱藏的表單域

  • 隱藏的表單域是一種在 HTML 表單中使用隱藏字段來傳遞數據的方法
  • 這些字段在頁面上不可見,但它們的值會隨著表單一起提交到服務器
<!DOCTYPE html>
<html>
<head><title>Hidden Form Field Example</title>
</head>
<body><form action="servlet3" method="post"><input type="hidden" name="userid" value="123"><input type="submit" value="Submit"></form>
</body>
</html>

在這個例子中,userid 被隱藏在表單中,當用戶點擊提交按鈕時,userid 的值會被發送到 servlet3

  • 優點:簡單易用,不需要額外的配置。
  • 缺點:只能用于表單提交,并且數據會暴露在 HTML 源代碼中,安全性較低。
  • 使用場景:當需要在表單提交時傳遞少量數據,且對數據安全性要求不高時可以使用。

2. 網址重寫

網址重寫是指在 URL 后面附加參數來傳遞數據。

// 在 servlet2 中
response.sendRedirect("servlet3?userid=123");

在這個例子中,userid 作為參數附加在 servlet3 的 URL 后面,當用戶訪問這個 URL 時,userid 的值會被傳遞到 servlet3

  • 優點:簡單直接,不需要額外的配置
  • 缺點:數據會暴露在 URL 中,安全性較低,并且 URL 的長度有限制
  • 使用場景:當需要在頁面跳轉時傳遞少量數據,且對數據安全性要求不高時可以使用

3. 使用 Cookie

在這里插入圖片描述

Cookie 是由應用程序服務器存儲在客戶端瀏覽器的小文件,用于追蹤所有用戶

3.1 Cookie 的工作流程
  1. 服務器在響應頭中設置 Set-Cookie 字段,將 Cookie 信息發送給客戶端瀏覽器。
  2. 客戶端瀏覽器接收到響應后,會將 Cookie 信息存儲在本地。
  3. 當客戶端瀏覽器再次向服務器發送請求時,會在請求頭中包含 Cookie 字段,將存儲的 Cookie 信息發送給服務器。
  4. 服務器接收到請求后,會從請求頭中讀取 Cookie 信息,從而識別用戶。
3.2 Java 中的方法,Cookie 類

在 Java 中,可以使用 javax.servlet.http.Cookie 類來創建、管理和讀取 Cookie。

三、Cookie 的實現

在這里插入圖片描述

1. 創建 Cookie

// 在 servlet2 中
Cookie userIdCookie = new Cookie("userid", "123");

2. 添加 Cookie

// 在 servlet2 中
response.addCookie(userIdCookie);

3. 讀取 Cookie

// 在 servlet3 中
Cookie[] cookies = request.getCookies();
if (cookies != null) {for (Cookie cookie : cookies) {if ("userid".equals(cookie.getName())) {String userId = cookie.getValue();// 使用 userId 進行后續操作}}
}
  • 優點:可以在多個頁面之間共享數據,并且可以設置 Cookie 的有效期和作用域
  • 缺點:數據會存儲在客戶端瀏覽器中,安全性較低,并且 Cookie 的大小有限制
  • 使用場景:當需要在多個頁面之間共享少量數據,且對數據安全性要求不高時可以使用

四、實現 HttpSession

HttpSession 是 Java Servlet 提供的一種會話管理機制,它允許在多個請求之間跟蹤用戶的狀態。

// 在 servlet2 中
HttpSession session = request.getSession();
session.setAttribute("userid", "123");// 在 servlet3 中
HttpSession session = request.getSession(false);
if (session != null) {String userId = (String) session.getAttribute("userid");// 使用 userId 進行后續操作
}
  • 優點:數據存儲在服務器端,安全性較高,并且可以存儲任意類型的數據。
  • 缺點:需要占用服務器的內存資源,并且在分布式環境中需要進行額外的配置。
  • 使用場景:當需要在多個請求之間跟蹤用戶的狀態,并且對數據安全性要求較高時可以使用。

五、處理錯誤

1. 發送錯誤

在 Servlet 中,可以使用 response.sendError 方法發送錯誤信息。

response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");

2. 自定義錯誤頁面

可以在 web.xml 中配置自定義錯誤頁面。

<error-page><error-code>404</error-code><location>/404.jsp</location>
</error-page>
<error-page><error-code>500</error-code><location>/500.jsp</location>
</error-page>

當發生 404 或 500 錯誤時,會自動跳轉到相應的錯誤頁面。

綜上所述,會話管理技術有隱藏的表單域、網址重寫、使用 Cookie 和 HttpSession 等。每種技術都有其優缺點和適用場景,在實際開發中需要根據具體需求選擇合適的會話管理技術。

會話管理技術作用優點缺點使用場景
隱藏的表單域在表單提交時傳遞數據,如將 useridservlet2 傳到 servlet3簡單易用,無需額外配置只能用于表單提交,數據暴露在 HTML 源代碼中,安全性低表單提交時傳遞少量數據,對安全性要求不高
網址重寫在頁面跳轉時傳遞數據,如在 URL 后附加 userid 傳遞到 servlet3簡單直接,無需額外配置數據暴露在 URL 中,安全性低,URL 長度有限制頁面跳轉時傳遞少量數據,對安全性要求不高
使用 Cookie在多個頁面間共享數據,服務器可通過 Cookie 追蹤用戶可在多頁面共享數據,能設置有效期和作用域數據存于客戶端,安全性低,Cookie 大小有限制多頁面間共享少量數據,對安全性要求不高
HttpSession在多個請求間跟蹤用戶狀態,可存儲任意類型數據數據存于服務器端,安全性高占用服務器內存資源,分布式環境需額外配置多個請求間跟蹤用戶狀態,對安全性要求較高

以上就是這篇博客的全部內容,下一篇我們將繼續探索 Java-servlet 的更多精彩內容。

我的個人主頁,歡迎來閱讀我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章專欄
歡迎來閱讀指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

非常感謝您的閱讀,喜歡的話記得三連哦

在這里插入圖片描述

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

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

相關文章

uniapp開發中store的基本用法和模塊化詳解

在 UniApp 開發中,狀態管理是非常重要的一部分,尤其是在復雜的應用場景下。Vuex 是 Vue.js 的官方狀態管理庫,可以幫助開發者集中管理應用的狀態數據。UniApp 作為基于 Vue.js 的跨平臺開發框架,也支持使用 Vuex 進行狀態管理。 以下是關于 Vuex 在 UniApp 中的詳細用法介…

手寫數據庫MYDB(一):項目啟動效果展示和環境配置問題說明

1.項目概況 這個項目實際上就是一個輪子項目&#xff0c;現在我看到的這個市面上面比較火的就是這個首先RPC&#xff0c;好多的機構都在搞這個&#xff0c;還有這個消息隊列之類的&#xff0c;但是這個是基于MYSQL的&#xff0c;我們知道這個MYSQL在八股盛宴里面是重點考察對象…

基于Spring Boot的電動車智能充電服務平臺的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

【AI學習】人工神經網絡

1,人工神經網絡(Artificial Neural Networks,ANNs,連接模型,Connection Model) 模仿動物神經網絡行為特征(突觸聯接的結構),進行分布式并行信息處理的算法數學模型。依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的。 2,前饋神…

場館預約小程序的設計與實現

摘 要 時代在進步&#xff0c;人們對日常生活質量的要求不再受限于衣食住行。現代人不僅想要一個健康的身體&#xff0c;還想擁有一身宛如黃金比例的身材。但是人們平常除了上下班和上下學的時間&#xff0c;其余空余時間寥寥無幾&#xff0c;所以我們需要用體育場館預約來節省…

筆記:純真IP庫

最近需要使用到ip解析成對應的地域&#xff0c;查找了一些資料&#xff0c;發現純真ip庫&#xff0c;這個比較好用&#xff0c;而且社區版可以獲得免費授權。 純真ip庫官網地址&#xff1a;https://www.cz88.net/ python版本git地址&#xff1a;https://github.com/tagphi/cz…

骨密度以及骨密度測量,測量方案,意義;提高;實現方案

骨密度及骨密度測量 骨密度&#xff08;Bone Mineral Density, BMD&#xff09; 是指骨骼單位體積或單位面積內礦物質&#xff08;主要是鈣和磷&#xff09;的含量&#xff0c;是評估骨骼強度的重要指標。骨密度降低可能導致骨質疏松&#xff0c;增加骨折風險。 簡單分析效果&…

MySQL 體系結構與存儲引擎

目錄 一、MySQL 體系結構 1. 連接層 (Connection Layer) 2. 服務層 (Server Layer) 3. 存儲引擎層 (Storage Engine Layer) 二、MySQL 核心存儲引擎比較 1. InnoDB (默認引擎) 2. MyISAM 3. Memory (HEAP) 4. 其他存儲引擎 三、InnoDB 存儲引擎深度解析 1. 核心架構組…

知識就是力量——物聯網應用技術

基礎知識篇 一、常用電子元器件1——USB Type C 接口引腳詳解特點接口定義作用主從設備關于6P引腳的簡介 2——常用通信芯片CH343P概述特點引腳定義 CH340概述特點封裝 3——蜂鳴器概述類型驅動電路原文鏈接 二、常用封裝介紹貼片電阻電容封裝介紹封裝尺寸與功率關系&#xff1…

vue復習1~45

1.關于vue 要理解記憶規則&#xff0c;可以到官網上去找 vue的兩種使用方式 vue核心包開發 場景&#xff1a;局部模塊改造vue核心包 & vue插件 工程化開發 場景&#xff1a;整站開發 2.創建vue實例 構建用戶頁面->創建vue實例初始化渲染 學習階段用開發版本 3.插值…

Netty和Project Reactor如何共同處理大數據流?

在處理大數據流時&#xff0c;Netty和Project Reactor可以協同工作&#xff0c;充分利用Netty的高性能非阻塞IO和Project Reactor的響應式編程模型&#xff0c;實現高效的數據處理和背壓控制。以下是如何共同處理大數據流的詳細步驟和示例代碼&#xff1a; ### 1. Netty和Proj…

【Nginx】location匹配模式與規則

文章目錄 一、環境二、匹配模式1. 精準模式2. 前綴模式&#xff08;不繼續匹配正則&#xff09;3. 前綴模式&#xff08;繼續匹配正則&#xff09;4. 正則模式&#xff08;大小寫敏感&#xff09;5. 正則模式&#xff08;大小寫不敏感&#xff09; 三、需要注意的地方1. 命中多…

JavaScript基礎-定時器

在Web開發中&#xff0c;有時我們需要延遲執行某些操作或者定期重復執行某段代碼。JavaScript提供了強大的定時器功能&#xff0c;使得這些需求變得簡單易行。本文將詳細介紹JavaScript中的定時器&#xff0c;包括setTimeout和setInterval函數的使用方法、注意事項以及一些實際…

【Python】and 和 or 的返回值

文章目錄 選項 A選項 B選項 C選項 D正確答案 以下哪些選項輸出結果為True ( ) A、print(2 0 or True) B、print(2 ! 0 or True) C、print(str(2) and str(0) or True) D、print(str(2) or str(0) or True)要確定哪些選項的輸出結果為 True&#xff0c;我們需要分析每個表達式的…

【deepseek 學c++】weakptr引用場景

std::weak_ptr 是 C 中與 std::shared_ptr 配合使用的智能指針&#xff0c;它本身不擁有資源的所有權&#xff0c;僅觀察資源的狀態&#xff0c;主要用于解決 shared_ptr 的循環引用問題和臨時訪問共享資源的需求。以下是 weak_ptr 的典型應用場景和核心價值&#xff1a;![ 為…

新手SEO優化實戰快速入門

內容概要 對于SEO新手而言&#xff0c;系統化掌握基礎邏輯與實操路徑是快速入門的關鍵。本指南以站內優化為切入點&#xff0c;從網站結構、URL設計到內鏈布局&#xff0c;逐層拆解搜索引擎友好的技術框架&#xff1b;同時聚焦關鍵詞挖掘與內容策略&#xff0c;結合工具使用與…

如何用Redis統計網站的UV

在 Java 項目中使用 Redis 統計網站的 UV&#xff08;獨立訪客數&#xff09;&#xff0c;我們可以利用 Redis 提供的 HyperLogLog 數據結構。HyperLogLog 適合用來做基數統計&#xff0c;它在空間復雜度上非常高效&#xff0c;可以在存儲大量數據的情況下&#xff0c;提供非常…

Android系統的安全問題 - Android的啟動時驗證

Android 啟動時驗證&#xff08;Verified Boot&#xff09; Android 的 啟動時驗證&#xff08;Verified Boot&#xff09; 是一項關鍵安全機制&#xff0c;用于確保設備啟動過程中加載的所有系統鏡像&#xff08;如 Bootloader、內核、系統分區&#xff09;未被篡改&#xff…

【操作系統】(四)體系結構

&#xff08;一&#xff09;大內核與微內核 把橘色部分劃分到內核中的操作系統屬于大內核&#xff0c;不把橘色劃到內核中的操作系統屬于微內核 大內核與微內核的具體區別&#xff1a; &#xff08;二&#xff09;計算機的層次結構 &#xff08;三&#xff09;操作系統內核非內…

Kotlin 協程官方文檔知識匯總(一)

1、協程基礎 Kotlin 是一門僅在標準庫中提供最基本底層 API 以便其他庫能夠利用協程的語言。與許多其他具有類似功能的語言不同&#xff0c;async 與 await 在 Kotlin 中并不是關鍵字&#xff0c;甚至都不是標準庫的一部分。此外&#xff0c;Kotlin 的掛起函數概念為異步操作提…