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

Java如何獲取Cookie和Session

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

??Cookie簡(jiǎn)介

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

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

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

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

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

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

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

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

??理解Session

要理解Session,我們先來(lái)理解一下會(huì)話

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

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

?如我們打客服電話
每次打客服電話,是?個(gè)會(huì)話.掛斷電話,會(huì)話就結(jié)束了
下次再打客服電話,?是?個(gè)新的會(huì)話.
如果我們?時(shí)間不說(shuō)話,沒(méi)有新的請(qǐng)求,會(huì)話也會(huì)結(jié)束

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

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

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

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

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

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

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

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

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

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

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

  • Cookie 是客?端保存??信息的?種機(jī)制.Session 是服務(wù)器端保存??信息的?種機(jī)制.
  • Cookie 和 Session之間主要是通過(guò) SessionId 關(guān)聯(lián)起來(lái)的, SessionId是 Cookie 和 Session 之間的橋梁
  • Cookie 和 Session 經(jīng)常會(huì)在?起配合使?. 但是不是必須配合
    • 完全可以? Cookie 來(lái)保存?些數(shù)據(jù)在客?端.這些數(shù)據(jù)不?定是???份信息,也不?定是SessionId
    • Session 中的sessionId 也不需要?得通過(guò) Cookie/Set-Cookie 傳遞,?如通過(guò)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ǔ)上實(shí)現(xiàn)的

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

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

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

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

我們來(lái)設(shè)置一下Cookie的值(按F12進(jìn)行設(shè)置)

我們?cè)龠M(jìn)行訪問(wèn)時(shí)

??簡(jiǎn)潔獲取Cookie

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

注意:

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

??獲取Session

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

Session 也是基于HttpServletRequest來(lái)存儲(chǔ)和獲取的

??Session存儲(chǔ)

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

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

獲取Session有以下兩種?式:

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

HttpSession getSession(boolean create)

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

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

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

??Session讀取

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

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

    @RequestMapping("/test15")
    public String test15(HttpServletRequest request) {
        // 如果 session 不存在, 不會(huì)?動(dòng)創(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;
    }

??簡(jiǎn)潔獲取Session

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

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

傳統(tǒng)獲取

簡(jiǎn)潔獲取

?總結(jié)

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

相關(guān)文章

  • springmvc集成shiro登錄失敗處理操作

    springmvc集成shiro登錄失敗處理操作

    這篇文章主要介紹了springmvc集成shiro登錄失敗處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • shell腳本運(yùn)行java程序jar的方法

    shell腳本運(yùn)行java程序jar的方法

    本篇文章主要介紹了shell腳本運(yùn)行java程序jar的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word

    基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word

    這篇文章主要介紹了基于Freemarker和xml實(shí)現(xiàn)Java導(dǎo)出word,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot2整合Drools規(guī)則引擎及案例詳解

    SpringBoot2整合Drools規(guī)則引擎及案例詳解

    這篇文章主要介紹了SpringBoot2整合Drools規(guī)則引擎及案例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java  中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解

    Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解

    這篇文章主要介紹了Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這部分知識(shí),需要的朋友可以參考下
    2017-09-09
  • log4j2?xml配置文件屏蔽第三方依賴包的日志方式

    log4j2?xml配置文件屏蔽第三方依賴包的日志方式

    這篇文章主要介紹了log4j2?xml配置文件屏蔽第三方依賴包的日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問(wèn)題

    SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的

    這篇文章主要介紹了SLF4J報(bào)錯(cuò)解決:No SLF4J providers were found的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • elasticsearch聚合查詢實(shí)踐示例

    elasticsearch聚合查詢實(shí)踐示例

    這篇文章主要為大家介紹了elasticsearch聚合查詢實(shí)踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法

    Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法

    本文主要介紹了Java實(shí)現(xiàn)Timer的定時(shí)調(diào)度函數(shù)schedule的四種用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 基于json解析神器 jsonpath的使用說(shuō)明

    基于json解析神器 jsonpath的使用說(shuō)明

    這篇文章主要介紹了基于json解析神器 jsonpath的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論