欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Java中Cookie和Session的區(qū)別

 更新時間:2023年06月13日 11:53:51   作者:碼出code  
會話跟蹤是Web程序中常用的技術(shù),用來跟蹤用戶的整個會話,常用的會話跟蹤技術(shù)是Cookie與Session,本文就詳細的介紹一下Java中Cookie和Session的區(qū)別,感興趣的可以了解一下

HTTP 是一種不保存狀態(tài)的協(xié)議,即無狀態(tài)協(xié)議,HTTP 協(xié)議不會保存請求和響應(yīng)之間的通信狀態(tài),協(xié)議對于發(fā)送過的請求和響應(yīng)都不會做持久化處理。

無狀態(tài)協(xié)議減少了對服務(wù)壓力,如果一個服務(wù)器需要處理百萬級用戶的請求狀態(tài),對服務(wù)器的壓力無疑的是巨大的。

無狀態(tài)的 HTTP 由于其簡單和易用性,應(yīng)用比較管廣泛。而且早期的 Web 服務(wù)對于狀態(tài)的需求也很低,所以應(yīng)用場景也比較廣泛。

隨著 Web 的不斷發(fā)展,越來越多的服務(wù)需要記錄用戶的登錄狀態(tài),比如購物、聊天、論壇服務(wù),請求都是無狀態(tài)的服務(wù),服務(wù)器就無法識別是 HTTP 請求的用戶信息,所以就需要一種技術(shù)保存用戶的狀態(tài),也就 Cookie 技術(shù),有了 Cookie 的 HTTP 協(xié)議通信,就能保存狀態(tài)了。

Cookie

在無狀態(tài)協(xié)議不受影響的基礎(chǔ)上,通過引入 Cookie 來記錄狀態(tài),這樣既不會影響原有的功能,也可以解決請求狀態(tài)問題。Cookie 是當你瀏覽網(wǎng)頁,通過服務(wù)器記錄你的用戶名,密碼等網(wǎng)頁信息。

Cookie 是由服務(wù)端創(chuàng)建,客戶端向服務(wù)發(fā)送請求后,服務(wù)端通過響應(yīng)報文的Set-Cookie 字段將 Cookie 信息返回給客戶端,客戶端自動保存 Cookie。Cookie 會標記來源、有效期、路徑等信息??蛻舳嗽俅握埱笤摲?wù)端時,會自動將 Cookie 添加到請求報文中(Request Header),服務(wù)端就能通過傳遞的 Cookie 識別客戶端的信息。

1.沒有 Cookie 信息的請求:

2.再次(有了Cookie信息后)發(fā)送請求

Cookie 簡單實踐

使用 Spring Boot 創(chuàng)建簡單的 Controller,當客戶端傳遞的參數(shù) a 有值時,服務(wù)端才添加 Cookie:

@GetMapping("/cookie")
@ResponseBody
public String cookie(String a, HttpServletRequest request, HttpServletResponse response) {
    if (a != null) {
        Cookie cookie = new Cookie("name",a);
        response.addCookie(cookie);
    }
    return "ok";
}

首先使用 Chrome 瀏覽器發(fā)送請求http://localhost:8080/cookie:

返回結(jié)果沒有 Cookie。

再發(fā)送帶有 a 參數(shù)的請求http://localhost:8080/cookie?a=jeremy:

返回 Cookie 都存在 Set-Cookie 字段中,客戶端會自動保存 Cookie。

再次發(fā)送相同的請求http://localhost:8080/cookie?a=jeremy:

**請求會將客戶端的 Cooike 自動添加到請求報文中,**此時服務(wù)端也能接收到 Cookie信息:

Session

Session 是服務(wù)端保存用戶狀態(tài)的一種機制,當用戶訪問網(wǎng)站時,服務(wù)端會為每個用戶創(chuàng)建唯一個會話標識,并根據(jù)用戶登錄請求創(chuàng)建和存儲會話信息,客戶端再次請求時,就能從服務(wù)端獲取會話信息了。

Session 簡單實踐

在 Java 中的 Servlet 提供 HttpSession 的接口來操作會話信息,只要有以下幾個方法:

  • public HttpSession getSession() 獲取會話信息,如果不存在就創(chuàng)建會話信息。
  • public String getId() 獲取唯一的會話 id。
  • public void invalidate() 將會話信息失效,一般注銷時候使用。

HttpSession 接口通過 getAttribute() 和 setAttribute() 來獲取和設(shè)置會話信息,
下面創(chuàng)建兩個方法,session() 方法獲取會話判斷用戶是否登錄,login() 方法添加會話信息。

@GetMapping("/session")
@ResponseBody
public String session(HttpServletRequest request, HttpServletResponse response) {
    HttpSession session = request.getSession();
    Boolean login =(Boolean) session.getAttribute("login");
    String loginInfo;
    if (login == null) {
        loginInfo = "未登錄";
    } else {
        loginInfo = "已登錄";
    }
    return "session id :" + session.getId() + ":" + loginInfo;
}
@GetMapping("/login")
@ResponseBody
public String login(HttpServletRequest request) {
    HttpSession session = request.getSession();
    session.setAttribute("login",true);
    return "ok";
}

先請求 http://localhost:8080/session,返回如下信息:

session id :F3C560208A54E3D5B465CDEBE7419817:未登錄

多次發(fā)送請求,session id 是一致的,說明 session id是在會話周期之內(nèi)(瀏覽器不關(guān)閉)都是不變的。

然后請求登錄接口 http://localhost:8080/login,設(shè)置了會話信息之后,再請求 http://localhost:8080/session:返回如下信息:

session id :F3C560208A54E3D5B465CDEBE7419817:已登錄

同一個用戶請求,服務(wù)端會創(chuàng)建唯一的會話,在請求的生命周期之內(nèi),會話 id 一直不改變。session 會話由服務(wù)端添加后,后續(xù)請求就能獲取到會話信息,會話信息只存儲在服務(wù)端。

Cookie 和 Session 的區(qū)別

Cookie 是存儲在客戶端上小型文本,是由服務(wù)端創(chuàng)建,然后通過響應(yīng)報文的 Set-Cookie 字段返回給客戶端。客戶端每次請求服務(wù)端嗎,瀏覽器都會將 Cookie 信息發(fā)送給服務(wù)端,服務(wù)端根據(jù) Cookie 來識別用戶的會話信息。Cookie 有如下幾個特點:

存儲在客戶端可以被客戶端修改和刪除數(shù)據(jù)比較小,例如用戶基本信息、購物信息可以設(shè)置過期時間。

Session 是服務(wù)端存儲會話信息,當客戶端請求服務(wù)端時,服務(wù)端會被每個用戶創(chuàng)建一個唯一的會話(Session id)標識,并在服務(wù)端設(shè)置和存儲會話信息,并在后續(xù)的請求,可以獲取到會話信息,主要有如下特點:

存儲在服務(wù)端,客戶端無法修改和刪除數(shù)據(jù)比較大,比如用戶的信息,登錄記錄。通常依賴 Cookie 和客戶端進行數(shù)據(jù)交換。

Cookie 和 Session 的主要區(qū)別:

儲存位置:Cookie 存儲在客戶端,Session 存儲在服務(wù)端上。數(shù)據(jù)大?。篊ookie 通常比較小,Session 通常存儲較大的數(shù)據(jù)。安全性:Cookie 可以通過 js 設(shè)置和修改,也可能通過抓包工具修改,可以輕易的被修改,Cookie 安全性差,很多瀏覽器也禁用了 Cookie,Cookie 使用也不多。Session 的設(shè)置和修改都在服務(wù)端,安全性相對 Cookie 高很多。

在實際的使用場景上,Cookie 和 Session 也會結(jié)合使用,服務(wù)端使用Session記錄用戶的會話信息,而將會話信息存儲在 Cookie 中,這樣可以減少服務(wù)端的壓力。

到此這篇關(guān)于深入了解Java中Cookie和Session的區(qū)別的文章就介紹到這了,更多相關(guān)Java Cookie Session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis Plus 字段為空值時執(zhí)行更新方法未更新解決方案

    Mybatis Plus 字段為空值時執(zhí)行更新方法未更新解決方案

    這篇文章主要介紹了Mybatis Plus 字段為空值時執(zhí)行更新方法未更新解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring中SmartLifecycle的用法解讀

    Spring中SmartLifecycle的用法解讀

    這篇文章主要介紹了Spring中SmartLifecycle的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法

    SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法

    這篇文章主要介紹了SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • SpringBoot Bean花式注解方法示例下篇

    SpringBoot Bean花式注解方法示例下篇

    這篇文章主要介紹了SpringBoot Bean花式注解方法,很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean
    2023-02-02
  • Java實現(xiàn)堆排序(大根堆)的示例代碼

    Java實現(xiàn)堆排序(大根堆)的示例代碼

    這篇文章主要介紹了Java實現(xiàn)堆排序(大根堆)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 一篇文章帶你了解java數(shù)據(jù)庫連接

    一篇文章帶你了解java數(shù)據(jù)庫連接

    這篇文章主要介紹了Java基于連接數(shù)據(jù)庫及顯示數(shù)據(jù)操作,結(jié)合實例形式分析了Java使用jdbc進行mysql數(shù)據(jù)庫連接與數(shù)據(jù)讀取、顯示等相關(guān)操作技巧,需要的朋友可以參考下
    2021-08-08
  • 詳解Java接口簽名(Signature)實現(xiàn)方案

    詳解Java接口簽名(Signature)實現(xiàn)方案

    這篇文章主要介紹了Java接口簽名(Signature)實現(xiàn)方案?,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    SpringBoot整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制功能

    本教程詳細介紹了如何使用SpringBoot整合SpringSecurity實現(xiàn)數(shù)據(jù)庫登錄和權(quán)限控制,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 監(jiān)控Spring Boot 項目運行情況操作方法

    監(jiān)控Spring Boot 項目運行情況操作方法

    在實際開發(fā)中,經(jīng)常會遇到想要獲取到服務(wù)器應(yīng)用的運行情況的場景,在微服務(wù)架構(gòu)下對于每個應(yīng)用運行情況的監(jiān)控是保證系統(tǒng)高可用的關(guān)鍵,本文給大家介紹如何實現(xiàn)在Spring Boot的jar包中對系統(tǒng)的運行情況進行監(jiān)控操作,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Java之SpringCloudAlibaba Sentinel組件案例講解

    Java之SpringCloudAlibaba Sentinel組件案例講解

    這篇文章主要介紹了Java之SpringCloudAlibaba Sentinel組件案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論