最新国产好看的视频,伊人天堂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)用程序可能必須跟蹤用戶從一個頁面到另一個頁面的進度,例如,當(dāng)需要 Web 服務(wù)器為用戶自定義網(wǎng)頁內(nèi)容時。 這些情況的解決方案包括:

  • HTTP cookie 的使用。
  • 服務(wù)器端會話。
  • 隱藏變量(當(dāng)當(dāng)前頁面包含表單時)
  • 使用 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)將更加復(fù)雜。 事實上,模型的簡單性是其最大的特點之一。

一、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)存中,當(dāng)瀏覽器關(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)存中,當(dāng)瀏覽器關(guān)閉時,瀏覽器的運行內(nèi)存會被釋放,因此cookie會被清空。因此會話默認的有效時間就是瀏覽器開啟到瀏覽器關(guān)閉

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

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

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

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

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

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

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

cookie.setPath();

當(dāng)創(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對象

當(dāng)此次會話中第一次訪問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都是同一個?

答:

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

若請求報文中沒有鍵為JSESSIONID的cookie,此時表示當(dāng)前的會話剛剛開始,是當(dāng)前會話中第一次獲取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ò)負擔(dān)

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

相關(guān)文章

  • Java多線程編程之讀寫鎖ReadWriteLock用法實例

    Java多線程編程之讀寫鎖ReadWriteLock用法實例

    這篇文章主要介紹了Java多線程編程之讀寫鎖ReadWriteLock用法實例,本文直接給出編碼實例,需要的朋友可以參考下
    2015-05-05
  • Jersey Restful接口如何獲取參數(shù)的問題

    Jersey Restful接口如何獲取參數(shù)的問題

    這篇文章主要介紹了Jersey Restful接口如何獲取參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot下載Excel文件時,報錯文件損壞的解決方案

    SpringBoot下載Excel文件時,報錯文件損壞的解決方案

    這篇文章主要介紹了SpringBoot下載Excel文件時,報錯文件損壞的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實現(xiàn)堆排序和圖解

    Java實現(xiàn)堆排序和圖解

    如果將堆理解為二叉樹,那么樹中任一非葉結(jié)點的關(guān)鍵字均不大于(或不小于)其左右孩子(若存在)結(jié)點的關(guān)鍵字,堆排序的時間復(fù)雜度為O(N*logN),這里我們就來詳解堆排序算法原理及Java版的代碼實現(xiàn)
    2021-07-07
  • Spring boot route Controller接收參數(shù)常用方法解析

    Spring boot route Controller接收參數(shù)常用方法解析

    這篇文章主要介紹了Spring boot route Controller接收參數(shù)常用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • MyBatis 結(jié)果映射的兩種方式

    MyBatis 結(jié)果映射的兩種方式

    本文主要介紹了MyBatis的結(jié)果映射機制,包括基本結(jié)果映射、復(fù)雜結(jié)果映射以及動態(tài)結(jié)果映射和延遲加載,通過合理配置結(jié)果映射,可以簡化復(fù)雜查詢結(jié)果,感興趣的可以了解一下
    2024-11-11
  • java之使用stream對日期排序方式

    java之使用stream對日期排序方式

    這篇文章主要介紹了java之使用stream對日期排序方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • json解析時遇到英文雙引號報錯的解決方法

    json解析時遇到英文雙引號報錯的解決方法

    下面小編就為大家分享一篇json解析時遇到英文雙引號報錯的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • SpringBoot?Application核心注解詳解

    SpringBoot?Application核心注解詳解

    進入到@SpringBootApplication的源碼,可以看到里面組合了三個我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個注解
    2022-10-10
  • Java文件與IO流操作原理詳細分析

    Java文件與IO流操作原理詳細分析

    在java中提供有對于文件操作系統(tǒng)的支持,這個支持在java.io.File類中進行了定義,也就是說在整個java.io包中File類是唯一一個與文件本身操作有關(guān)的類(創(chuàng)建,刪除,重命名)有關(guān)的類,而如果想要進行File類的操作,我們需要提供有完整的路徑支持,而后可以調(diào)用相應(yīng)的方法進行處理
    2022-09-09

最新評論

体育| 嘉峪关市| 玛曲县| 绥棱县| 上杭县| 乐亭县| 旬邑县| 阿克| 新郑市| 科技| 宁武县| 江津市| 邯郸县| 新泰市| 泽普县| 辉南县| 兴化市| 通城县| 河源市| 贵港市| 恩平市| 于田县| 家居| 托克逊县| 桐乡市| 绩溪县| 广东省| 江西省| 怀远县| 农安县| 黄陵县| 大方县| 商都县| 洛川县| 东阳市| 子洲县| 虞城县| 潞城市| 平武县| 云和县| 甘肃省|