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

Javaweb會話跟蹤技術Cookie和Session的具體使用

 更新時間:2022年07月18日 11:42:41   作者:懶羊羊.java  
本文主要介紹了Javaweb會話跟蹤技術Cookie&Session的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

紙上得來終覺淺,絕知此事要躬行

一.會話引入

什么是會話?
會話用來識別不同的客戶端,客戶端和服務器之間發(fā)生的一系列連續(xù)的請求和響應的過程,當我們打開瀏覽器,點擊多個鏈接,訪問服務器多個web資源,然后關閉瀏覽器結束瀏覽,整個過程稱之為一個會話
可以說在上網(wǎng)的過程中無時無刻發(fā)生著會話
我們使用瀏覽器與服務器進行會話的過程中,各自都會產(chǎn)生一些數(shù)據(jù),服務器要想辦法為每個用戶保存這些數(shù)據(jù),比如登錄信息,購買記錄等…要實現(xiàn)上述目的,完善用戶體驗于是引出了會話的兩種技術 ——Cookie&Session

二.Cookie

1.Cookie的理解

客戶端會話跟蹤技術
在清理瀏覽器垃圾的時候,經(jīng)常有這樣一個選項

在這里插入圖片描述

這個Cookie里到底是存放的什么?需要單獨列出一個選項
Cookie是服務器在客戶端保存用戶的信息,比如登錄名,瀏覽歷史等, 就可以以cookie方式保存
Cookie是客戶端技術,服務器把每個用戶的數(shù)據(jù)以cookie的形式寫給用戶各自的瀏覽器,當用戶使用瀏覽器再去訪問服務器中的web資源時,就會帶著各自的數(shù)據(jù)去。這樣,web資源處理的就是用戶各自的數(shù)據(jù)了

在這里插入圖片描述

實現(xiàn)原理:
Cookie的實現(xiàn)是基于http協(xié)議,響應頭:set-cookie,請求頭:cookie
瀏覽器會一次性地將當前域名下的所有的Cookie都攜帶到對應的資源里去,我們需要時就直接獲取對應鍵的名稱就可以得到
Cookie 信息的數(shù)據(jù)量并不大,服務器端在需要的時候可以從客戶端/瀏覽器讀取(http 協(xié)議)就像這樣:

在這里插入圖片描述

發(fā)送Cookie到服務器中:

@WebServlet("/A")
public class Servlet01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "lyy"); //創(chuàng)建對象
        resp.addCookie(cookie);  //放到瀏覽器里啦
  }

保存于瀏覽器內存中的Cookie

在這里插入圖片描述

再次使用瀏覽器獲取先前的Cookie:

@WebServlet("/B")
public class Servlet02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();  //存到數(shù)組里
        for (Cookie cookie : cookies) { //遍歷
            //獲取數(shù)據(jù)
            String name = cookie.getName();
            String value = cookie.getValue();
            System.out.println(name + " " + value);
            break;
}

當我們重新使用一個Servlet來訪問瀏覽器時,我們得到了先前Cookie對象里的內容:

在這里插入圖片描述

這樣,我們就實現(xiàn)了在一次會話的兩次請求之間共享了數(shù)據(jù)

2.Cookie生命周期

默認情況下:
Cookie存儲在瀏覽器內存中,當關閉瀏覽器內存釋放,他自動銷毀,所謂的無痕瀏覽就是這樣
非默認情況下:
1… setMaxAge(int seconds)設置Cookie存活時間

  Cookie cookie = new Cookie("name", "lyy");
  cookie.setMaxAge(60*60*24*7);  //設置存活時間為一周

發(fā)送到服務器后通過瀏覽器查看Cookie詳細信息發(fā)現(xiàn)生命周期剛好一周:

在這里插入圖片描述

2… 正數(shù),表示在指定的秒數(shù)后過期
3… 負數(shù),表示瀏覽器關閉,Cookie 就會被刪除(默認值是-1)
4… 0,表示馬上刪除Cookie
注意:Cookie不能直接存儲中文,要通過轉碼
(URL編碼,encode()/decode())

3.Cookie有效路徑

1.Cookie 有效路徑 Path 的設置
2.Cookie的Path屬性可以有效的過濾哪些Cookie可以發(fā)送給服務器,哪些不發(fā)( Path 屬性是通過請求的地址來進行有效的過濾 )
3.規(guī)則如下:

cookieA.setPath = /demo
cookieB.setPath = /demo/123

當請求地址為: http://localhost/demo/資源
cookieA會發(fā)給服務器而cookieB不會發(fā)給服務器
當請求地址為: http://localhost/demo/123/資源
cookieA會發(fā)給服務器cookieB會發(fā)給服務器

4.Cookie使用細節(jié)

1.一個 Cookie 只能標識一種信息,它至少含有一個標識該信息的名稱(name)和設置值(value)且都是String類型

在這里插入圖片描述

2.一個 WEB站點可以給一個瀏覽器發(fā)送多個 Cookie,一個瀏覽器也可以存儲多個 WEB 站點提供的Cookie
3.cookie的總數(shù)量沒有限制,但是每個域名的Cookie數(shù)量和每個Cookie的大小是有限制的 (不同的瀏覽器限制不同),Cookie不適合存放數(shù)據(jù)量大的信息
4.注意,刪除cookie時,path必須一致,否則不會刪除成功,要對號入座

三.Session

服務端會話跟蹤技術
不同的用戶登錄網(wǎng)站后,不管該用戶瀏覽該網(wǎng)站的哪個頁面,都可顯示登錄人的名字, 還可以隨時去查看自己的購物車中的商品
簡言之,一個用戶在瀏覽網(wǎng)站不同頁面時,通過Session,服務器可以知道是哪個用戶在訪問該頁面并且做出回饋,Session是基于Cookie實現(xiàn)的

1.Session基本原理

1.Session 是服務器端技術,服務器在運行時為每一個用戶的瀏覽器創(chuàng)建一個其獨享的 session 對象/集合
2.由于 session 為各個用戶瀏覽器獨享,所以用戶在訪問服務器的不同頁面時,可以從各自 的 session 中讀取/添加數(shù)據(jù), 從而完成相應任務

在這里插入圖片描述

3.當用戶打開瀏覽器,訪問某個網(wǎng)站, 操作session時服務器就會在內存(在服務端)為該瀏覽器分配一個session 對象,該session對象被這個瀏覽器獨占

2.Session的理解

Session可以做什么
1.網(wǎng)上商城中的購物車
2.保存登錄用戶的信息
3.將數(shù)據(jù)放入到 Session 中,供用戶在訪問不同頁面時,實現(xiàn)跨頁面訪問數(shù)據(jù)
4.防止用戶非法登錄到某個頁面
可以把session看作是一容器類似Map雙列集合,有兩列(K-V),每一行就是session的一 個屬性,每個屬性包含有兩個部分:
一個是該屬性的名字(String),另外一個是它的值(Object)

在這里插入圖片描述

3.Session基本使用

1.創(chuàng)建和獲取 Session,HttpSession hs=request.getSession();
 第 1 次調用是創(chuàng)建 Session 會話,之后調用是獲取創(chuàng)建好的Session 對象 
2.向session 添加屬性 hs.setAttribute(String name,Object val); 
3.從session 得到某個屬性Object obj=hs.getAttribute(String name);
4.從session 刪除調某個屬性: hs.removeAttribute(String name); 
5.isNew(); 判斷是不是剛創(chuàng)建出來的 Session 
6.每個Session都有唯一標識id值。通過getid() 得到Session的會話id 值

4.Session底層

為什么說Session是基于Cookie實現(xiàn)的,一張圖給你安排的明明白白!

在這里插入圖片描述

5.Session生命周期

Session不能長時間保存數(shù)據(jù),瀏覽器關閉后獲取的就不是同一個Session
但是在服務器里就不一樣
Session的鈍化、活化:
服務器重啟后,Session中的數(shù)據(jù)是否還在?
鈍化:在服務器正常關閉后,Tomcat會自動將Session數(shù)據(jù)寫入硬盤的文件中
活化:再次啟動服務器后,從文件中加載數(shù)據(jù)到Session中
1.setMaxInactiveInterval(int interval)設置Session的超時時間(以秒為單位),超過指定的時長,Session 就會被銷毀
2.值為正數(shù)的時候,設定Session的超時時長,負數(shù)則表示永不超時
4.getMaxInactiveInterval()獲取Session的超時時間
5.invalidate() 讓當前 Session 會話立即無效
6. 如果沒有調用 setMaxInactiveInterval() 來指定 Session 的生命時長,Tomcat會以 Session 默認時長為準,Session 默認的超時為 30 分鐘,可以在 tomcat的web.xml 設置

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

7.Session 的生命周期指的是 :
客戶端/瀏覽器兩次請求最大間隔時長,而不是累積時長。即當客戶端訪問了自己的 session,session 的生命周期將從 0 開始重新計算。(同一個會話兩次請求之間的間隔時間)
8.底層: Tomcat 用一個線程來輪詢會話狀態(tài),如果某個會話的空閑時間超過設定的最大值, 則將該會話銷毀

到此這篇關于Javaweb會話跟蹤技術Cookie&Session的具體使用的文章就介紹到這了,更多相關Javaweb Cookie Session內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java多線程CyclicBarrier的使用案例,讓線程起步走

    java多線程CyclicBarrier的使用案例,讓線程起步走

    這篇文章主要介紹了java多線程CyclicBarrier的使用案例,讓線程起步走!具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 如何將Mybatis連接到ClickHouse

    如何將Mybatis連接到ClickHouse

    這篇文章主要介紹了如何將Mybatis連接到ClickHouse,幫助大家更好得理解和學習使用Mybatis,感興趣的朋友可以了解下
    2021-03-03
  • JPA @Basic單表查詢如何實現(xiàn)大字段懶加載

    JPA @Basic單表查詢如何實現(xiàn)大字段懶加載

    這篇文章主要介紹了JPA @Basic單表查詢如何實現(xiàn)大字段懶加載的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JMeter導入自定義的Jar包的詳解教程

    JMeter導入自定義的Jar包的詳解教程

    這篇文章主要介紹了JMeter導入自定義的Jar包的詳解教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 一篇文章學會java死鎖與CPU 100%的排查

    一篇文章學會java死鎖與CPU 100%的排查

    這篇文章主要介紹了一篇文章學會java死鎖與CPU 100%的排查,文中主要介紹了Java死鎖以及服務器CPU占用率達到100%時的排查和解決方法,感興趣的朋友一起來看一看吧
    2021-08-08
  • Mybatis實現(xiàn)查詢相冊數(shù)據(jù)列表流程講解

    Mybatis實現(xiàn)查詢相冊數(shù)據(jù)列表流程講解

    這篇文章主要介紹了Mybatis實現(xiàn)查詢相冊數(shù)據(jù)列表流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • java讀取resource目錄下文件的方法示例

    java讀取resource目錄下文件的方法示例

    這篇文章主要介紹了利用java讀取resource目錄下文件的方法,文中給出了詳細的示例代碼,相信對大家具有一定的參考借鑒,需要的朋友們下面來一起看看吧。
    2017-02-02
  • java HashMap,TreeMap與LinkedHashMap的詳解

    java HashMap,TreeMap與LinkedHashMap的詳解

    這篇文章主要介紹了 java HashMap,TreeMap與LinkedHashMap的詳解的相關資料,這里提供實例代碼,幫助大家學習理解 這部分的內容,需要的朋友可以參考下
    2016-11-11
  • 詳解JDK 5 Annotation 注解之@Target的用法介紹

    詳解JDK 5 Annotation 注解之@Target的用法介紹

    這篇文章主要介紹了詳解JDK 5 Annotation 注解之@Target的用法介紹,需要的朋友可以參考下
    2016-02-02
  • Java編程中正則表達式的用法總結

    Java編程中正則表達式的用法總結

    這篇文章主要介紹了Java編程中正則表達式的用法總結,正則表達式是一種強大的字符串處理工具,Java對正則表達式的支持還是很不錯的,我們先來整理一下正則表達式的一些基礎知識:
    2016-05-05

最新評論