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

Java中的Cookie和Session詳細解析

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

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

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

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

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

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

會話

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

Cookie是什么?

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

Cookie的使用案例

記住用戶名

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

歷史記錄

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

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); // 保存賬號數(shù)據(jù)
        cookie.setMaxAge(1*60*60*24); // cookie存在在本地的有效時長(單位為秒) 默認(rèn)為-1  表示頁面關(guān)閉cookie就失效
            response.addCookie(cookie);//添加到response
    }
    // ...省略登錄邏輯  
}

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

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

<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ù)器

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

Session是什么?

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

Session的使用案例

登陸驗證信息

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

Session共享

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

Session的使用

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

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

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

第一次請求:

后續(xù)請求:

總結(jié)

Cookie

1. cookie在瀏覽器中保存多長時間?

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

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

持久化存儲:

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

2. cookie共享問題?

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

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

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

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

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

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

3. Cookie的特點和作用

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

Session

1. session什么時候被銷毀?

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

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

2. session的特點

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    Java List的remove()方法踩坑

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

    spring mvc配置bootstrap教程

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

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

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

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

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

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

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

最新評論