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

Java cookie和session會話技術(shù)介紹

 更新時間:2023年04月06日 11:21:06   作者:努力奮斗的JAVA小余  
session的工作原理和cookie非常類似,在cookie中存放一個sessionID,真實的數(shù)據(jù)存放在服務(wù)器端,客戶端每次發(fā)送請求的時候帶上sessionID,服務(wù)端根據(jù)sessionID進行數(shù)據(jù)的響應(yīng)

http無狀態(tài)協(xié)議的解決:

HTTP 是一種無狀態(tài)協(xié)議。 無狀態(tài)協(xié)議不要求服務(wù)器在多次請求期間保留有關(guān)每個用戶的信息或狀態(tài)。

但是某些 Web 應(yīng)用程序可能必須跟蹤用戶從一個頁面到另一個頁面的進度,例如,當需要 Web 服務(wù)器為用戶自定義網(wǎng)頁內(nèi)容時。 這些情況的解決方案包括:

  • HTTP cookie 的使用。
  • 服務(wù)器端會話。
  • 隱藏變量(當當前頁面包含表單時)
  • 使用 URI 編碼參數(shù)的 URL 重寫,例如,/index.php?session_id=some_unique_session_code。

使協(xié)議無狀態(tài)的原因是服務(wù)器不需要跟蹤多個請求的狀態(tài),而不是它如果愿意就不能這樣做。 這簡化了客戶端和服務(wù)器之間的合同,并且在許多情況下(例如通過 CDN 提供靜態(tài)數(shù)據(jù))最大限度地減少了需要傳輸?shù)臄?shù)據(jù)量。 如果要求服務(wù)器維護客戶端訪問的狀態(tài),則發(fā)出和響應(yīng)請求的結(jié)構(gòu)將更加復雜。 事實上,模型的簡單性是其最大的特點之一。

一、cookie

1、cookie的概念

cookie是一種在服務(wù)器中創(chuàng)建并維護,但是保存在瀏覽器端的會話技術(shù)

cookie的應(yīng)用場景:記住用戶名和密碼、七天免登陸

2、cookie的創(chuàng)建

//創(chuàng)建cookie
Cookie cookie = new Cookie("username", "admin");
//將cookie響應(yīng)到瀏覽器
response.addCookie(cookie);

cookie在報文中的表示方式:

若在服務(wù)器中創(chuàng)建cookie,并響應(yīng)到瀏覽器,此時在響應(yīng)報文中會出現(xiàn):Set-Cookie: username=admin

此后,每次瀏覽器向服務(wù)器發(fā)送請求,都會攜帶此cookie,在請求報文中會出現(xiàn):Cookie: username=admin

把cookie響應(yīng)到瀏覽器之后,會保存在瀏覽器的運行內(nèi)存中,當瀏覽器關(guān)閉時,瀏覽器的運行內(nèi)存會被釋放,因此cookie會被清空。因此會話默認的有效時間就是瀏覽器開啟到瀏覽器關(guān)閉

3、獲取cookie

//獲取瀏覽器發(fā)送請求所攜帶的所有cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for (Cookie cookie : cookies) {
        System.out.println(cookie.getName() + "," + cookie.getValue());
    }
}

4、修改cookie

a>因為cookie是鍵值對格式的數(shù)據(jù),因此只需要創(chuàng)建相同的鍵不同的值的cookie,響應(yīng)瀏覽器,就會將相對應(yīng)的cookie的值進行覆蓋

b>使用cookie.setValue()

/*Cookie cookie = new Cookie("username", "root");
response.addCookie(cookie);*/
Cookie[] cookies = request.getCookies();
if(cookies != null){
    for (Cookie cookie : cookies) {
        if(cookie.getName().equals("username")){
            cookie.setValue("zhangsan");
            response.addCookie(cookie);
        }
    }
}

5、設(shè)置cookie的有效時間

把cookie響應(yīng)到瀏覽器之后,會保存在瀏覽器的運行內(nèi)存中,當瀏覽器關(guān)閉時,瀏覽器的運行內(nèi)存會被釋放,因此cookie會被清空。因此會話默認的有效時間就是瀏覽器開啟到瀏覽器關(guān)閉

但是可以通過cookie.setMaxAge()設(shè)置cookie的有效時間

a>當設(shè)置的有效時間為負整數(shù)時,沒有任何效果,即有效時間為瀏覽器開啟到瀏覽器關(guān)閉

b>當設(shè)置的有效時間為0時,表示立即刪除該cookie

c>當設(shè)置的有效時間為正整數(shù)時

? 若有效時間小于一次會話,cookie到了指定時間,就會自動從運行內(nèi)存中刪除

? 若有效時間大于一次會話,當瀏覽器關(guān)閉,會將cookie中的數(shù)據(jù)保存到磁盤中,當瀏覽器再次開啟時,會將磁盤中的數(shù)據(jù)重新加載到運行內(nèi)存中

6、設(shè)置cookie的有效路徑

cookie.setPath();

當創(chuàng)建了cookie,并響應(yīng)到瀏覽器之后,設(shè)置了有效路徑的cookie,只有在訪問指定路徑時才會攜帶該cookie

二、session

1、session的概念

session是一種在服務(wù)器中創(chuàng)建并維護并保存在服務(wù)器端的會話技術(shù)

session的應(yīng)用場景:記錄用戶的登錄狀態(tài)

2、觀察獲取session時的報文變化情況

通過request.getSession()獲取session對象

當此次會話中第一次訪問request.getSession()獲取session對象時,響應(yīng)報文中會出一個鍵為JSESSIONID的cookie

之后每次通過瀏覽器發(fā)送請求到服務(wù)器,都會攜帶此JSESSIONID的cookie

哪怕訪問服務(wù)器時,使用的request.getSession()再次獲取session對象,只要請求報文中有JSESSIONID的cookie,響應(yīng)報文中就不會再出現(xiàn)此cookie

3、session的原理

問:

session的原理?

session和cookie的關(guān)系?

為什么在一次會話中,獲取的session都是同一個?

答:

當通過request.getSession()獲取session時,會獲取請求報文中鍵為JSESSIONID的cookie

若請求報文中沒有鍵為JSESSIONID的cookie,此時表示當前的會話剛剛開始,是當前會話中第一次獲取session對象。此時在服務(wù)器內(nèi)部會創(chuàng)建session對象,并且會創(chuàng)建一個cookie,鍵為JSESSIONID,值為UUID隨機序列;然后會將創(chuàng)建session對象存儲到一個由服務(wù)器所維護的map集合中,以UUID隨機序列為鍵,以session對象為值,最終將JSESSIONID的cookie響應(yīng)到瀏覽器

若請求報文中存在鍵為JSESSIONID的cookie,此時獲取該cookie的值,即UUID隨機序列,以UUID隨機序列為鍵,從服務(wù)器所維護的map集合中就可以獲取唯一的session對象

4、session的常用方法

4.1、session存在域?qū)ο蟮臄?shù)據(jù)

void setAttribute(String name, Object value);

Object getAttribute(String name);

void removeAttribute(String name);

4.2、設(shè)置session的時效

session的時效指在指定時間內(nèi),若沒有對session進行任何的操作,此時session會自動失效

a>通過web.xml設(shè)置,單位是分鐘

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

b>通過session.setMaxInactiveInterval()設(shè)置,單位是秒

session.setMaxInactiveInterval(1800);

4.3、強制使session失效

session.invalidate()

5、session的鈍化和活化

session的鈍化指服務(wù)器關(guān)閉,但是瀏覽器沒有關(guān)閉,此時session中的數(shù)據(jù)會被序列化到磁盤上

session的活化指服務(wù)器啟動,并且瀏覽器仍然沒有關(guān)閉,此時會將序列化到磁盤上的數(shù)據(jù)重新加載到內(nèi)存中

注意:若session中存儲的是實體類對象,此時若要鈍化,則該實體類和該實體類的成員變量也都要實現(xiàn)序列化的接口

三、cookie和session的區(qū)別

1、cookie存儲在瀏覽器端,session存儲在服務(wù)器端,因此cookie相對而言不安全

2、cookie只能存儲字符串類型的鍵值對,session可以存儲任意類型的數(shù)據(jù),因此若存儲相同的數(shù)據(jù),cookie可能會產(chǎn)生大量的cookie

3、由于每次瀏覽器發(fā)送請求都會攜帶cookie,若有大量的cookie,就會造成網(wǎng)絡(luò)負擔

到此這篇關(guān)于Java cookie和session會話技術(shù)介紹的文章就介紹到這了,更多相關(guān)Java cookie和session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ReentrantrantLock底層實現(xiàn)原理及分析

    ReentrantrantLock底層實現(xiàn)原理及分析

    本文詳細介紹了Java并發(fā)包中ReentrantLock的實現(xiàn)原理,包括非公平鎖和公平鎖的加鎖和解鎖機制,以及可重入和可打斷特性,同時,還介紹了條件變量的實現(xiàn)原理,通過await和signal方法來管理線程間的等待和喚醒
    2026-03-03
  • Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法

    Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法

    這篇文章主要介紹了Java中char數(shù)組(字符數(shù)組)與字符串String類型的轉(zhuǎn)換方法,涉及Java中toCharArray與valueOf方法的使用技巧,需要的朋友可以參考下
    2015-12-12
  • springboot2 jackson實現(xiàn)動態(tài)返回類字段方式

    springboot2 jackson實現(xiàn)動態(tài)返回類字段方式

    這篇文章主要介紹了springboot2 jackson實現(xiàn)動態(tài)返回類字段方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法

    SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法

    這篇文章主要給大家介紹了關(guān)于SpringBoot?@DS注解實現(xiàn)多數(shù)據(jù)源配置以及問題解決辦法,所謂多數(shù)據(jù)源就是一個Java EE項目中采用了不同數(shù)據(jù)庫實例中的多個庫,或者是同一個數(shù)據(jù)庫實例中的多個不同庫,需要的朋友可以參考下
    2023-11-11
  • 一文搞懂Java中對象池的實現(xiàn)

    一文搞懂Java中對象池的實現(xiàn)

    池化并不是什么新鮮的技術(shù),它更像一種軟件設(shè)計模式,主要功能是緩存一組已經(jīng)初始化的對象,以供隨時可以使用。本文將為大家詳細講講Java中對象池的實現(xiàn),需要的可以參考一下
    2022-07-07
  • java線程池ThreadPoolExecutor實現(xiàn)原理詳解

    java線程池ThreadPoolExecutor實現(xiàn)原理詳解

    這篇文章主要介紹了java線程池ThreadPoolExecutor實現(xiàn)原理詳解,ThreadPoolExecutor是線程池實現(xiàn)類,會動態(tài)創(chuàng)建多個線程,并發(fā)執(zhí)行提交的多個任務(wù),需要的朋友可以參考下
    2023-12-12
  • Java多線程 中斷機制及實例詳解

    Java多線程 中斷機制及實例詳解

    這篇文章主要介紹了Java多線程 中斷機制及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java終止線程的兩種方法

    Java終止線程的兩種方法

    本文主要介紹了Java終止線程的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Java如何判斷一個字符串是否包含某個字符串

    Java如何判斷一個字符串是否包含某個字符串

    這篇文章主要給大家介紹了關(guān)于Java如何判斷一個字符串是否包含某個字符串的相關(guān)資料,在實際編程中,經(jīng)常需要判斷一個字符串中是否包含某個子串,需要的朋友可以參考下
    2023-07-07
  • 解析Java的Spring框架的BeanPostProcessor發(fā)布處理器

    解析Java的Spring框架的BeanPostProcessor發(fā)布處理器

    這篇文章主要介紹了Java的Spring框架的BeanPostProcessor發(fā)布處理器,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12

最新評論

萍乡市| 苗栗县| 邓州市| 锦州市| 安庆市| 舒兰市| 图木舒克市| 南投市| 汉沽区| 忻城县| 定边县| 东辽县| 乌拉特前旗| 云阳县| 搜索| 浦东新区| 康乐县| 安达市| 施甸县| 子长县| 瓮安县| 清河县| 广平县| 南乐县| 绥阳县| 凤凰县| 平塘县| 林西县| 体育| 株洲市| 潍坊市| 商河县| 湖南省| 厦门市| 河曲县| 观塘区| 南安市| 格尔木市| 卓尼县| 阳曲县| 沅陵县|