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

Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用

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

前言

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

一.會(huì)話引入

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

二.Cookie

1.Cookie的理解

客戶端會(huì)話跟蹤技術(shù)
在清理瀏覽器垃圾的時(shí)候,經(jīng)常有這樣一個(gè)選項(xiàng)

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

@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)建對(duì)象
        resp.addCookie(cookie);  //放到瀏覽器里啦
  }

保存于瀏覽器內(nèi)存中的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;
}

當(dāng)我們重新使用一個(gè)Servlet來訪問瀏覽器時(shí),我們得到了先前Cookie對(duì)象里的內(nèi)容:

在這里插入圖片描述

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

2.Cookie生命周期

默認(rèn)情況下:
Cookie存儲(chǔ)在瀏覽器內(nèi)存中,當(dāng)關(guān)閉瀏覽器內(nèi)存釋放,他自動(dòng)銷毀,所謂的無痕瀏覽就是這樣
非默認(rèn)情況下:
1… setMaxAge(int seconds)設(shè)置Cookie存活時(shí)間

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

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

在這里插入圖片描述

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

3.Cookie有效路徑

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

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

當(dāng)請(qǐng)求地址為: http://localhost/demo/資源
cookieA會(huì)發(fā)給服務(wù)器而cookieB不會(huì)發(fā)給服務(wù)器
當(dāng)請(qǐng)求地址為: http://localhost/demo/123/資源
cookieA會(huì)發(fā)給服務(wù)器cookieB會(huì)發(fā)給服務(wù)器

4.Cookie使用細(xì)節(jié)

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

在這里插入圖片描述

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

三.Session

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

1.Session基本原理

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

在這里插入圖片描述

3.當(dāng)用戶打開瀏覽器,訪問某個(gè)網(wǎng)站, 操作session時(shí)服務(wù)器就會(huì)在內(nèi)存(在服務(wù)端)為該瀏覽器分配一個(gè)session 對(duì)象,該session對(duì)象被這個(gè)瀏覽器獨(dú)占

2.Session的理解

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

在這里插入圖片描述

3.Session基本使用

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

4.Session底層

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

在這里插入圖片描述

5.Session生命周期

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

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

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

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

相關(guān)文章

最新評(píng)論

兴隆县| 昌江| 峨眉山市| 潼关县| 禄丰县| 洞头县| 开原市| 哈尔滨市| 彝良县| 巴林右旗| 嘉黎县| 建阳市| 上高县| 宿迁市| 佳木斯市| 当阳市| 卓尼县| 兰西县| 万荣县| 惠安县| 无为县| 施秉县| 新巴尔虎右旗| 麟游县| 寿光市| 无锡市| 阳原县| 峡江县| 涟水县| 拉萨市| 交城县| 都匀市| 新竹县| 黎城县| 兴安县| 祁门县| 蒙自县| 芜湖市| 鄂托克前旗| 苗栗县| 宜城市|