亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的Cookie和Session詳細(xì)解析

 更新時(shí)間:2024年01月22日 09:56:50   作者:我不是歐拉_  
這篇文章主要介紹了Java中的Cookie和Session詳細(xì)解析,客戶端會(huì)話技術(shù),服務(wù)端給客戶端的數(shù)據(jù),存儲(chǔ)于客戶端(瀏覽器),由于是保存在客戶端上的,所以存在安全問題,需要的朋友可以參考下

http協(xié)議無狀態(tài)

無狀態(tài)的官方解釋:

  1. 協(xié)議對(duì)于事務(wù)處理沒有記憶能力
  2. 對(duì)同一個(gè)url請(qǐng)求沒有上下文關(guān)系
  3. 每次的請(qǐng)求都是獨(dú)立的,它的執(zhí)行情況和結(jié)果與之前的請(qǐng)求和之后的請(qǐng)求是無直接關(guān)系的,它不會(huì)受前面的請(qǐng)求應(yīng)答情況直接影響,也不會(huì)直接影響后面的請(qǐng)求應(yīng)答情況
  4. 服務(wù)器中沒有保存客戶端的狀態(tài),客戶端必須每次帶上自己的狀態(tài)去請(qǐng)求服務(wù)器。

簡單理解就是客戶端是第二次訪問服務(wù)器,服務(wù)器還是把此次訪當(dāng)做一個(gè)新的訪問進(jìn)行處理,因?yàn)榉?wù)端并不知道客戶端之前是否訪問過。

為了解決這一問題,Web程序中采用會(huì)話跟蹤技術(shù),會(huì)話跟蹤技術(shù)就是依靠Cookie和Session實(shí)現(xiàn)。Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務(wù)器端記錄信息確定用戶身份。

會(huì)話

一次會(huì)話:瀏覽器第一次給服務(wù)器資源發(fā)送請(qǐng)求,會(huì)話建立,直到有一方斷開為止。一次會(huì)話中包含多次請(qǐng)求和響應(yīng)。有了會(huì)話跟蹤可以在一次會(huì)話的范圍內(nèi)的多次請(qǐng)求間,共享數(shù)據(jù)。

Cookie是什么?

客戶端會(huì)話技術(shù),服務(wù)端給客戶端的數(shù)據(jù),存儲(chǔ)于客戶端(瀏覽器)。由于是保存在客戶端上的,所以存在安全問題,并且cookie是由個(gè)數(shù)和大小限制的(4KB),所以一般cookie用來存儲(chǔ)一些比較小且安全性要求不高的數(shù)據(jù),而且一般數(shù)據(jù)都會(huì)進(jìn)行加密。

Cookie的使用案例

記住用戶名

登錄時(shí),在服務(wù)器端獲取到用戶名,然后創(chuàng)建一個(gè)cookie,將用戶名存入cookie中,發(fā)送回瀏覽器端,然后瀏覽器下次在訪問登錄頁面時(shí),先拿到cookie,將cookie中的信息拿出來,看是否保存了該用戶名,如果保存了,那么直接用他,如果沒有,則自己手寫用戶名。

歷史記錄

比如購物網(wǎng)站,都會(huì)有我們的瀏覽記錄的,實(shí)現(xiàn)原理其實(shí)也是用cookie技術(shù),每瀏覽一個(gè)商品,就將其存入cookie中,到需要顯示瀏覽記錄時(shí),只需要將cookie拿出來遍歷即可。 

Cookie的使用流程

創(chuàng)建cookie

servlet創(chuàng)建cookie,保存少量數(shù)據(jù),發(fā)送瀏覽器。

public void login(HttpServletRequest request, HttpServletResponse response) {
    String account = request.getParameter("account");
    String pwd = request.getParameter("pwd");
    String isRemember = request.getParameter("remember");
    if (isRemember != null) {
        Cookie cookie = new Cookie("account", account); // 保存賬號(hào)數(shù)據(jù)
        cookie.setMaxAge(1*60*60*24); // cookie存在在本地的有效時(shí)長(單位為秒) 默認(rèn)為-1  表示頁面關(guān)閉cookie就失效
            response.addCookie(cookie);//添加到response
    }
    // ...省略登錄邏輯  
}

獲得cookie數(shù)據(jù)

瀏覽器獲得服務(wù)器發(fā)送的cookie數(shù)據(jù),將自動(dòng)的保存到瀏覽器端。

<form action="<%=application.getContextPath()%>/login">
 
    <%--將cookie中攜帶的account值賦值給value--%>
    <input name="account" value="<%=cookieAccount%>"><br>
    <input name="pwd"><br>
    記住密碼:<input type="checkbox" name="remember"> <br>
    <input type="submit" value="登錄">
 
</form>

發(fā)送給服務(wù)器

下次訪問時(shí),瀏覽器將自動(dòng)攜帶cookie數(shù)據(jù)發(fā)送給服務(wù)器。

Session是什么?

服務(wù)器端會(huì)話技術(shù),在一次會(huì)話的多次請(qǐng)求間共享數(shù)據(jù),將數(shù)據(jù)保存在服務(wù)器端的對(duì)象中。HttpSession。

Session的使用案例

登陸驗(yàn)證信息

用戶的各種私人信息,比如姓名等,某種情況下,需要保存在Session里 需要在頁面間傳遞 的內(nèi)容信息,比如調(diào)查工作需要分好幾步。每一步的信息都保存在Session里,最后在統(tǒng)一更 新到數(shù)據(jù)庫。

Session共享

對(duì)于多網(wǎng)站(同一父域不同子域)單服務(wù)器,我們需要解決的就是來自不同網(wǎng)站之間SessionId的共享。由于域名不同(blog.yoodb.com 和daohang.yoodb.com),而SessionId又分別儲(chǔ)存在各自的Cookie中,因此服務(wù)器會(huì)認(rèn)為對(duì)于兩個(gè)子站的訪問,是來自不同的會(huì)話。解決的方法是通過修改Cookies的域名為父域名達(dá)到cookie共享的目的,從而實(shí)現(xiàn)SessionId的共享。帶來的弊端就是子站間的Cookie信息也同時(shí)被共享了。

Session的使用

Session的實(shí)現(xiàn)是依賴于Cookie的。

Cookie中有JSESSIONID這個(gè)字段,實(shí)際上首次請(qǐng)求網(wǎng)頁時(shí)在請(qǐng)求頭里是沒有這個(gè)字段的,因?yàn)槲覀儾]有創(chuàng)建session,當(dāng)我們調(diào)用request.getSession()時(shí),此時(shí)會(huì)創(chuàng)建一個(gè)session,并且將sessionId保存到cookie中,然后回寫給response,所以我們發(fā)現(xiàn)首次創(chuàng)建session時(shí)的響應(yīng)頭中有JSESSIONID這個(gè)字段,后面的request默認(rèn)都會(huì)帶上JSESSIONID這個(gè)字段,而response中則不會(huì)再有該字段了。而服務(wù)器就能夠根據(jù)JSESSIONID這個(gè)字段值查找對(duì)應(yīng)的session。

如果瀏覽器禁用了cookie,那么,每次請(qǐng)求都會(huì)重新創(chuàng)建session,因?yàn)榉?wù)器沒有獲取到JSESSIONID這個(gè)值,也無法根據(jù)JSESSIONID的值查找相應(yīng)的session,也就是說,如果客戶端禁用了cookie,那么session也將失效。如圖:

第一次請(qǐng)求:

后續(xù)請(qǐng)求:

總結(jié)

Cookie

1. cookie在瀏覽器中保存多長時(shí)間?

默認(rèn)情況下在瀏覽器關(guān)閉后就會(huì)失效。即一次會(huì)話后就失效。因?yàn)閏ookie是放在瀏覽器緩存的,瀏覽器關(guān)閉會(huì)清除緩存所以cookie會(huì)失效。

要想使這個(gè)cookie在瀏覽器關(guān)閉后仍然有效就需要設(shè)置有效時(shí)間將其寫到磁盤下。

持久化存儲(chǔ):

setMaxAge(int seconds)
正數(shù):將Cookie數(shù)據(jù)寫到硬盤的文件中。持久化存儲(chǔ)。并指定cookie存活時(shí)間,時(shí)間到后,cookie文件自動(dòng)失效
負(fù)數(shù):默認(rèn)值
零:刪除cookie信息

2. cookie共享問題?

假設(shè)在一個(gè)tomcat服務(wù)器中,部署了多個(gè)web項(xiàng)目,那么在這些web項(xiàng)目中cookie能不能共享?

默認(rèn)情況下cookie不能共享setPath(String path):設(shè)置cookie的獲取范圍。默認(rèn)情況下,設(shè)置當(dāng)前的虛擬目錄

如果要共享,則可以將path設(shè)置為"/"

不同的tomcat服務(wù)器間cookie共享問題?

setDomain(String path):如果設(shè)置一級(jí)域名相同,那么多個(gè)服務(wù)器之間cookie可以共享

setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享

3. Cookie的特點(diǎn)和作用

  • cookie存儲(chǔ)數(shù)據(jù)在客戶端瀏覽器 3.2 瀏覽器對(duì)于單個(gè)cookie 的大小有限制(4kb) 以及 對(duì)同一個(gè)域名下的總cookie數(shù)量也有限制(20個(gè))
  • cookie一般用于存出少量的不太敏感的數(shù)據(jù),在不登錄的情況下,完成服務(wù)器對(duì)客戶端的身份識(shí)別

Session

1. session什么時(shí)候被銷毀?

  • 服務(wù)器關(guān)閉.
  • session對(duì)象調(diào)用invalidate() 。
  • session默認(rèn)失效時(shí)間 30分鐘。

  選擇性配置修改    
            <session-config>
                <session-timeout>30</session-timeout>
            </session-config>

2. session的特點(diǎn)

  • session用于存儲(chǔ)一次會(huì)話的多次請(qǐng)求的數(shù)據(jù),存在服務(wù)器端。
  • session可以存儲(chǔ)任意類型,任意大小的數(shù)據(jù)。

3. session與Cookie的區(qū)別

  • session存儲(chǔ)數(shù)據(jù)在服務(wù)器端,Cookie在客戶端。
  • session沒有數(shù)據(jù)大小限制,Cookie有。
  • session數(shù)據(jù)安全,Cookie相對(duì)于不安全。

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

相關(guān)文章

  • 關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用

    關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用

    本文主要介紹了關(guān)于SpringBoot中controller參數(shù)校驗(yàn)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • springcloud部署提示 找不到url的解決

    springcloud部署提示 找不到url的解決

    這篇文章主要介紹了springcloud部署提示 找不到url的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • 淺談Spring中IOC的理解和認(rèn)知

    淺談Spring中IOC的理解和認(rèn)知

    這篇文章主要介紹了淺談Spring中IOC的理解和認(rèn)知,想了解Spring的同學(xué)不要錯(cuò)過啊
    2021-04-04
  • SpringBoot如何獲取客戶端的IP地址

    SpringBoot如何獲取客戶端的IP地址

    這篇文章主要介紹了SpringBoot如何獲取客戶端的IP地址問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Mybatis Plus整合PageHelper分頁的實(shí)現(xiàn)示例

    Mybatis Plus整合PageHelper分頁的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis Plus整合PageHelper分頁的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java List的remove()方法踩坑

    Java List的remove()方法踩坑

    Java的List在刪除元素時(shí),一般會(huì)用list.remove(o)/remove(i)方法。在使用時(shí),容易觸碰陷阱,本文就來介紹一下容易踩的坑,感興趣的可以了解一下
    2021-10-10
  • spring mvc配置bootstrap教程

    spring mvc配置bootstrap教程

    這篇文章主要為大家詳細(xì)介紹了spring mvc配置bootstrap,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java集合ArrayList、LinkedList、HashMap、HashSet最大容量

    Java集合ArrayList、LinkedList、HashMap、HashSet最大容量

    在開發(fā)中我們使用比較多的集合就是List、Set和Map了,并且我們也知道大部分用的基本上都是ArrayList、LinkedList、HashMap、HashSet或者TreeSet這幾個(gè)集合,你知道他們的最大容量,感興趣的可以了解一下
    2023-12-12
  • Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Java8接口中引入default關(guān)鍵字的本質(zhì)原因詳析

    Default方法是在java8中引入的關(guān)鍵字,也可稱為Virtual extension methods—虛擬擴(kuò)展方法,這篇文章主要給大家介紹了關(guān)于Java8接口中引入default關(guān)鍵字的本質(zhì)原因,需要的朋友可以參考下
    2022-01-01
  • MybatisPlus實(shí)現(xiàn)真正批量插入的詳細(xì)步驟

    MybatisPlus實(shí)現(xiàn)真正批量插入的詳細(xì)步驟

    在數(shù)據(jù)庫操作中,批量插入是提升效率的重要手段,MyBatis-Plus提供了多種批量插入方法,但默認(rèn)的saveBatch方法效率并不高,文章介紹了通過手動(dòng)拼接SQL、使用IService接口以及自定義insertBatchSomeColumn方法進(jìn)行優(yōu)化,以實(shí)現(xiàn)更高效的批量插入,并給出了性能優(yōu)化建議
    2024-10-10

最新評(píng)論