最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

Cookie

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

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

1.沒(méi)有 Cookie 信息的請(qǐng)求:

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

Cookie 簡(jiǎn)單實(shí)踐

使用 Spring Boot 創(chuàng)建簡(jiǎn)單的 Controller,當(dāng)客戶端傳遞的參數(shù) a 有值時(shí),服務(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ā)送請(qǐng)求http://localhost:8080/cookie:

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

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

返回 Cookie 都存在 Set-Cookie 字段中,客戶端會(huì)自動(dòng)保存 Cookie。

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

**請(qǐng)求會(huì)將客戶端的 Cooike 自動(dòng)添加到請(qǐng)求報(bào)文中,**此時(shí)服務(wù)端也能接收到 Cookie信息:

Session

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

Session 簡(jiǎn)單實(shí)踐

在 Java 中的 Servlet 提供 HttpSession 的接口來(lái)操作會(huì)話信息,只要有以下幾個(gè)方法:

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

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

@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";
}

先請(qǐng)求 http://localhost:8080/session,返回如下信息:

session id :F3C560208A54E3D5B465CDEBE7419817:未登錄

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

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

session id :F3C560208A54E3D5B465CDEBE7419817:已登錄

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

Cookie 和 Session 的區(qū)別

Cookie 是存儲(chǔ)在客戶端上小型文本,是由服務(wù)端創(chuàng)建,然后通過(guò)響應(yīng)報(bào)文的 Set-Cookie 字段返回給客戶端??蛻舳嗣看握?qǐng)求服務(wù)端嗎,瀏覽器都會(huì)將 Cookie 信息發(fā)送給服務(wù)端,服務(wù)端根據(jù) Cookie 來(lái)識(shí)別用戶的會(huì)話信息。Cookie 有如下幾個(gè)特點(diǎn):

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

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

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

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

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

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

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

相關(guān)文章

  • Java中的方法引用操作符(::)詳解與實(shí)戰(zhàn)應(yīng)用小結(jié)

    Java中的方法引用操作符(::)詳解與實(shí)戰(zhàn)應(yīng)用小結(jié)

    在Java 8中引入的::操作符是方法引用(Method Reference)的語(yǔ)法表示,它是Lambda表達(dá)式的一種簡(jiǎn)化形式,本文給大家介紹Java中的方法引用操作符(::)詳解與實(shí)戰(zhàn)應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    并查集是一種用來(lái)管理元素分組情況的數(shù)據(jù)結(jié)構(gòu)。并查集可以高效地進(jìn)行如下操作。本文將通過(guò)Java實(shí)現(xiàn)并查集,感興趣的小伙伴可以了解一下
    2022-01-01
  • SpringBoot越權(quán)和數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)方案(最新整理)

    SpringBoot越權(quán)和數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)方案(最新整理)

    文章介紹通過(guò)自定義注解@PermissionCheck、切面編程和用戶權(quán)限服務(wù)實(shí)現(xiàn)Java權(quán)限控制,限制只讀用戶操作,優(yōu)化數(shù)據(jù)庫(kù)查詢并統(tǒng)一異常處理,確保系統(tǒng)安全與擴(kuò)展性,本文給大家介紹SpringBoot越權(quán)和數(shù)據(jù)權(quán)限控制的實(shí)現(xiàn)方案,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • 通過(guò)實(shí)例解析Java List正確使用方法

    通過(guò)實(shí)例解析Java List正確使用方法

    這篇文章主要介紹了通過(guò)實(shí)例解析Java List正確使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java 5個(gè)人坐在一起(有關(guān)第五個(gè)人歲數(shù)的問(wèn)題)

    Java 5個(gè)人坐在一起(有關(guān)第五個(gè)人歲數(shù)的問(wèn)題)

    利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段。要想知道第五個(gè)人歲數(shù),需知道第四人的歲數(shù),依次類推,推到第一人(10歲),再往回推,需要的朋友可以參考下
    2017-02-02
  • Java線程的五種狀態(tài)介紹

    Java線程的五種狀態(tài)介紹

    本文主要為大家詳細(xì)介紹一下Java實(shí)現(xiàn)線程創(chuàng)建的五種寫法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定的幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-08-08
  • JDK11 下載與安裝、環(huán)境配置的圖文教程

    JDK11 下載與安裝、環(huán)境配置的圖文教程

    本文詳細(xì)介紹了下載并安裝JDK11,包括檢查系統(tǒng)是否已安裝JDK、從Oracle官網(wǎng)獲取下載鏈接、自定義安裝路徑,及后續(xù)的環(huán)境變量配置步驟,感興趣的可以了解一下
    2025-07-07
  • Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù)

    Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù)

    這篇文章主要介紹了Java實(shí)戰(zhàn)練習(xí)之撲克牌魔術(shù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Java實(shí)現(xiàn)批量化操作Excel文件的示例代碼

    Java實(shí)現(xiàn)批量化操作Excel文件的示例代碼

    在操作Excel的場(chǎng)景中,通常會(huì)有一些針對(duì)Excel的批量操作,這篇文章主要為大家詳細(xì)介紹了如何使用GcExcel實(shí)現(xiàn)批量化操作Excel,感興趣的可以了解一下
    2024-12-12
  • 淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些

    淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些

    這篇文章主要介紹了淺談一個(gè)基礎(chǔ)的SpringBoot項(xiàng)目該包含哪些,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

武冈市| 灌阳县| 罗江县| 双柏县| 寻甸| 库车县| 巴彦县| 成武县| 会宁县| 富平县| 克东县| 康平县| 大冶市| 正安县| 城市| 桂平市| 鱼台县| 西畴县| SHOW| 民和| 宜川县| 蒙城县| 沛县| 富顺县| 亚东县| 德保县| 柳河县| 巍山| 济南市| 靖安县| 达拉特旗| 赣榆县| 交口县| 安康市| 天津市| 万全县| 宣汉县| 潮州市| 宁蒗| 盐池县| 蒙阴县|