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

Java如何獲取Cookie和Session

 更新時間:2024年01月09日 12:02:17   作者:遇事問春風(fēng)乄  
Cookie?和?Session之間主要是通過?SessionId?關(guān)聯(lián)起來的,?SessionId是?Cookie?和?Session?之間的橋梁,這篇文章主要介紹了Java獲取Cookie和Session的方法,需要的朋友可以參考下

??Cookie簡介

HTTP 協(xié)議??是屬于 "?狀態(tài)"協(xié)議.

"?狀態(tài)"的含義指的是:

默認情況下 HTTP 協(xié)議的客?端和服務(wù)器之間的這次通信,和下次通信之間沒有直接的聯(lián)系.但是實際開發(fā)中,我們很多時候是需要知道請求之間的關(guān)聯(lián)關(guān)系的.

例如登陸?站成功后,第?次訪問的時候服務(wù)器就能知道該請求是否是已經(jīng)登陸過了.

想要了解詳情的可以看博主寫的 java遍歷http請求request的所有參數(shù)實現(xiàn)方法

上述圖中的"令牌"通常就存儲在Cookie字段中. ?如去醫(yī)院掛號

看病之前先掛號.掛號時候需要提供?份證號,同時得到了?張"就診卡",這個就診卡就相當(dāng)于患 者的"令牌".后續(xù)去各個科室進?檢查,診斷,開藥等操作,都不必再出??份證了,只要憑就診卡即可識別出當(dāng) 前患者的?份.看完病了之后,不想要就診卡了,就可以注銷這個卡.此時患者的?份和就診卡的關(guān)聯(lián)就銷毀了.(類 似于?站的注銷操作)?來看病,可以辦?張新的就診卡,此時就得到了?個新的"令牌"

此時在服務(wù)器這邊就需要記錄"令牌"信息,以及令牌對應(yīng)的??信息,這個就是 Session 機制所做的?作

??理解Session

要理解Session,我們先來理解一下會話

在計算機領(lǐng)域,會話是?個客?與服務(wù)器之間的不中斷的請求響應(yīng).對客?的每個請求,服務(wù)器能夠識別出請求來?于同?個客?.

當(dāng)?個未知的客?向Web應(yīng)?程序發(fā)送第?個請求時就開始了?個會話.當(dāng)客?明確結(jié)束會話或服務(wù)器在?個時限內(nèi)沒有接受到客?的任何請求時,會話就結(jié)束了.

?如我們打客服電話
每次打客服電話,是?個會話.掛斷電話,會話就結(jié)束了
下次再打客服電話,?是?個新的會話.
如果我們?時間不說話,沒有新的請求,會話也會結(jié)束

服務(wù)器同?時刻收到的請求是很多的.服務(wù)器需要清楚的區(qū)分每個請求是從屬于哪個??,也就是屬于哪個會話,就需要在服務(wù)器這邊記錄每個會話以及與??的信息的對應(yīng)關(guān)系.

Session是服務(wù)器為了保存??信息?創(chuàng)建的?個特殊的對象

Session的本質(zhì)就是?個"哈希表",存儲了?些鍵值對結(jié)構(gòu).Key 就是SessionID,Value就是??信息(??信息可以根據(jù)需求靈活設(shè)計).

SessionId 是由服務(wù)器?成的?個 “唯?性字符串”,從Session機制的?度來看,這個唯?性字符串稱為 SessionId .

但是站在整個登錄流程中看待,也可以把這個唯?性字符串稱為 token.

上述例?中的令牌ID,就可以看做是SessionId,只不過令牌除了ID之外,還會帶?些其他信息,?如時間,簽名等.

當(dāng)??登陸的時候,服務(wù)器在 Session 中新增?個新記錄, 把 sessionId返回給客?端.(通過HTTP 響應(yīng)中的 Set-Cookie 字段返回).

客?端后續(xù)再給服務(wù)器發(fā)送請求的時候,需要在請求中帶上sessionId.(通過HTTP請求中的Cookie字段帶上).

服務(wù)器收到請求之后,根據(jù)請求中的sessionId在Session信息中獲取到對應(yīng)的??信息,再進?后續(xù)操作.找不到則重新創(chuàng)建Session,并把SessionID返回

Session 默認是保存在內(nèi)存中的. 如果重啟服務(wù)器則 Session 數(shù)據(jù)就會丟失

??Cookie 和 Session 的區(qū)別

  • Cookie 是客?端保存??信息的?種機制.Session 是服務(wù)器端保存??信息的?種機制.
  • Cookie 和 Session之間主要是通過 SessionId 關(guān)聯(lián)起來的, SessionId是 Cookie 和 Session 之間的橋梁
  • Cookie 和 Session 經(jīng)常會在?起配合使?. 但是不是必須配合
    • 完全可以? Cookie 來保存?些數(shù)據(jù)在客?端.這些數(shù)據(jù)不?定是???份信息,也不?定是SessionId
    • Session 中的sessionId 也不需要?得通過 Cookie/Set-Cookie 傳遞,?如通過URL傳遞.

??獲取Cookie

??傳統(tǒng)獲取Cookie

    @RequestMapping("/test12")
    public String test12(HttpServletRequest request, HttpServletResponse response) {
        // 獲取所有 cookie 信息
        Cookie[] cookies = request.getCookies();
        //打印Cookie信息
        StringBuilder builder = new StringBuilder();
        if (cookies!=null){
            for (Cookie ck:cookies) {
                builder.append(ck.getName()+":"+ck.getValue());
            }
        }
        return "Cookie信息:"+builder;
    }

Spring MVC是基于 Servlet API 構(gòu)建的原始 Web 框架, 也是在Servlet的基礎(chǔ)上實現(xiàn)的

HttpServletRequest , HttpServletResponse 是Servlet提供的兩個類,是Spring MVC?法的內(nèi)置對象.需要時直接在?法中添加聲明即可.

HttpServletRequest對象代表客?端的請求,當(dāng)客?端通過HTTP協(xié)議訪問服務(wù)器時,HTTP請求頭中的所有信息都封裝在這個對象中,通過這個對象提供的?法,可以獲得客?端請求的所有信息.

HttpServletResponse 對象代表服務(wù)器的響應(yīng). HTTP響應(yīng)的信息都在這個對象中, ?如向客?端發(fā)送的數(shù)據(jù), 響應(yīng)頭,狀態(tài)碼等. 通過這個對象提供的?法, 可以獲得服務(wù)器響應(yīng)的所有內(nèi)容

Spring MVC在這兩個對象的基礎(chǔ)上進?了封裝, 給我們提供更加簡單的使??法.

我們來設(shè)置一下Cookie的值(按F12進行設(shè)置)

我們再進行訪問時

??簡潔獲取Cookie

@RequestMapping("/test13")
public String test13(@CookieValue String name) {
	return "name:" + name;
}

注意:

這個雖然獲取更簡單,但是一次只能獲取你想要獲取的參數(shù),不能獲取全部參數(shù)

??獲取Session

Session是服務(wù)器端的機制,我們需要先存儲,才能再獲取

Session 也是基于HttpServletRequest來存儲和獲取的

??Session存儲

    @RequestMapping("/test14")
    public String test14(HttpServletRequest request) {
        // 獲取Session對象
        HttpSession session = request.getSession();
        if (session != null) {
            session.setAttribute("username", "java");
        }
        return "session 存儲成功";
    }

這個代碼中看不到 SessionId 這樣的概念的. getSession 操作內(nèi)部提取到請求中的Cookie?的 SessionId, 然后根據(jù)SessionId獲取到對應(yīng)的Session 對象, Session 對象?HttpSession來描述

獲取Session有以下兩種?式:

HttpSession getSession(boolean create);
HttpSession getSession();

HttpSession getSession(boolean create)

  • 參數(shù)如果為 true, 則當(dāng)不存在會話時新建會話;
  • 參數(shù)如果為 false, 則當(dāng)不存在會話時返回 null

HttpSession getSession(): 和getSession(true) 含義?樣, 默認值為true.

void setAttribute(String name, Object value): 使?指定的名稱綁定?個對象到該 session 會話

??Session讀取

??傳統(tǒng)讀取Session

讀取 Session 可以使?傳統(tǒng)的 HttpServletRequest

    @RequestMapping("/test15")
    public String test15(HttpServletRequest request) {
        // 如果 session 不存在, 不會?動創(chuàng)建
        HttpSession session = request.getSession(false);
        String username = null;
        if (session != null && session.getAttribute("username") != null) {
            username = (String) session.getAttribute("username");
        }
        return "username:" + username;
    }

??簡潔獲取Session

    @RequestMapping("/test16")
    public String test16(@SessionAttribute(value = "username",required = false) String username){
        return "username:"+username;
    }

??結(jié)果展示 存儲

傳統(tǒng)獲取

簡潔獲取

?總結(jié)

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

相關(guān)文章

  • Java中的StringBuilder性能測試

    Java中的StringBuilder性能測試

    這篇文章主要介紹了Java中的StringBuilder性能測試,本文包含測試代碼和測試結(jié)果,最后得出結(jié)論,需要的朋友可以參考下
    2014-09-09
  • Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程

    Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程

    這篇文章主要為大家詳細介紹了Java初學(xué)者之五子棋游戲?qū)崿F(xiàn)教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JDK數(shù)組阻塞隊列源碼深入分析總結(jié)

    JDK數(shù)組阻塞隊列源碼深入分析總結(jié)

    在這篇文章當(dāng)中,我們將通過源碼仔細為大家介紹一下JDK具體是如何實現(xiàn)數(shù)組阻塞隊列的,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • springboot yml配置文件定義list集合、數(shù)組和map以及使用中的錯誤

    springboot yml配置文件定義list集合、數(shù)組和map以及使用中的錯誤

    這篇文章主要介紹了springboot yml配置文件定義list集合、數(shù)組和map以及使用中遇到的錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 分別在Groovy和Java中創(chuàng)建并初始化映射的不同分析

    分別在Groovy和Java中創(chuàng)建并初始化映射的不同分析

    這篇文章主要為大家介紹了分別在Groovy和Java中創(chuàng)建并初始化映射的不同分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

    2022-03-03
  • SpringBoot2 整合Ehcache組件,輕量級緩存管理的原理解析

    SpringBoot2 整合Ehcache組件,輕量級緩存管理的原理解析

    這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級緩存管理,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java線程池的四種拒絕策略詳解

    Java線程池的四種拒絕策略詳解

    jdk1.5 版本新增了JUC并發(fā)編程包,極大的簡化了傳統(tǒng)的多線程開發(fā),下面這篇文章主要介紹了Java線程池的四種拒絕策略的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 詳解SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo)

    詳解SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo)

    這篇文章主要介紹了SpringBoot中的index首頁的訪問、自定義Favicon圖標(biāo),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java?I/O流使用示例詳解

    Java?I/O流使用示例詳解

    Java.io?包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標(biāo)。本文將通過示例為大家詳細講講?I/O流的使用教程,需要的可以參考一下
    2022-08-08
  • IDEA JAVA項目熱加載的實現(xiàn)步驟

    IDEA JAVA項目熱加載的實現(xiàn)步驟

    熱加載可以使代碼修改后無須重啟服務(wù)器,就可以加載更改的代碼,本文主要介紹了IDEA JAVA項目熱加載的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06

最新評論

丹江口市| 宁陵县| 平阴县| 宜阳县| 商南县| 顺平县| 吉安县| 武清区| 安康市| 莱州市| 扎赉特旗| 曲麻莱县| 太白县| 龙里县| 固原市| 武威市| 监利县| 汶上县| 麦盖提县| 平顶山市| 浦县| 汽车| 淳安县| 屏边| 康乐县| 武川县| 游戏| 霞浦县| 永川市| 来安县| 东台市| 卢氏县| 阜康市| 长汀县| 揭东县| 分宜县| 昭苏县| 平陆县| 宿松县| 宁海县| 德令哈市|