若是沒有它,很多網站都會沒法登入

今天是劉小愛自學Java的第91天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

若是沒有它,很多網站都會沒法登入

學cookie之前,我先說一個問題:

如果我設定瀏覽器不儲存cookie。

會發現很多網站都沒法登入了。

購物網站購物車裡的資料自然也查不到了。

我們做一個測試,使用谷歌瀏覽器將cookie關閉,操作流程如下圖所示:

若是沒有它,很多網站都會沒法登入

當設定阻止所有Cookie後,會發現很多網站都沒法登入了,今天就學一學這個Cookie。

一、Cookie概述

1Cookie引入

什麼叫cookie?

簡而言之就是:會話過程中會產生資料,而資料的產生需要儲存,就需要使用到cookie技術。

那什麼又叫會話呢?

簡而言之就是:瀏覽器請求和伺服器響應是一個小迴圈,一個或多個小迴圈就是一個會話。

為何阻止Cookie後,很多網站就沒法登入了?

因為部分資料是儲存在Cookie裡的,把它阻止後資料無法儲存,自然沒法登入了。

總而言之Cookie就是伺服器在瀏覽器上暫時儲存的資料,典型例子就是記住使用者名稱和密碼。

2記住使用者名稱和密碼

我們在網頁上登入的時候,如果選擇了記住密碼,下次登入時就能直接登入。

其資料就是儲存在Cookie上的,以此為例編寫一個案例:

若是沒有它,很多網站都會沒法登入

給登入頁面加入了一個單選框,用來說明是否勾選記住密碼:

如果勾選了記住密碼,伺服器就得建立對應的Cookie,這樣資料就被儲存在瀏覽器上了。

如果沒有勾選記住密碼,則無須建立。

接著再來進行程式碼編寫。

二、Cookie基本API

1設定Cookie

若是沒有它,很多網站都會沒法登入

①獲取請求資訊

這些方法這在學request時就講過,不再贅述。

其中單選框用來判斷是否需要使用到Cookie,如果被選中,其值為on。

②根據請求資訊設定Cookie

Cookie對應Java中的一個類,其引數即為一個鍵值對:

key:該cookie的名稱。

value:該cookie對應的值。

設定好Cookie後,將其響應給瀏覽器就好了。

這樣做有什麼好處?

下次瀏覽器再訪問伺服器時,Cookie中的資料就能直接獲取了。

2獲取Cookie

若是沒有它,很多網站都會沒法登入

①獲取cookie並遍歷

透過請求獲取瀏覽器中本身就存在的Cookie,因為有一個或者多個Cookie,所以是陣列。

故需要使用增強for迴圈遍歷。

②獲取對應的cookie值

Cookie的getName(),獲取的是它的名。

Cookie的getValue(),獲取的是它的值。

3Cookie的特殊字元

若是沒有它,很多網站都會沒法登入

①特殊字元

如果直接在Cookie中存入的值包含特殊字元,響應該Cookie時會報錯。

②編碼特殊字元

使用URLEncoder類的encode方法,將其編碼:

引數1:需要編碼的值

引數2:指定編碼字符集

這樣就能將特殊字元存入Cookie了。

既然有編碼,那麼再次使用Cookie的時候肯定就要解碼了。

若是沒有它,很多網站都會沒法登入

③解碼

編碼對應的是URLEncoder類,方法為encode()

解碼對應的是URLDecoder類,方法為decode()

解碼後的字元和編碼前的字元就一樣了。

4Cookie的存活時間&有效路徑

現在瀏覽器中有了一個名為demo的Cookie,若是想將其刪除該怎麼辦?

透過瀏覽器設定可以刪除,透過程式碼也可以:

若是沒有它,很多網站都會沒法登入

①建立一個相同名的Cookie

要刪除名為demo的Cookie,就可以重新建立一個相同名稱的Cookie來代替它。

再將存活時間設定為0即可刪除了。

②保證有效路徑一致

這個因為在建立名為demo的Cookie時並沒有設定路徑,所以這裡可以不寫。

但是這個api要知道:

setPath()即為設定Cookie的有效路徑。

當設定Cookie的有效路徑後,就只能在有效路徑或其子路徑下訪問這個Cookie了。

③將存活時間設定為0秒

setMaxAge(0)即設定Cookie存活時間為0。

以上就是對Cookie的說明,除了Cookie可以儲存資料外,和其類似的還有一個Session。

三、Session技術

1Session引入

Session與Cookie的功能很相似,區別在於:

Cookie是伺服器記錄在了瀏覽器的資料,而Session是伺服器記錄在伺服器上的資料。

那Session到底有什麼用呢?先畫一張圖:

若是沒有它,很多網站都會沒法登入

①為什麼要有Session?

使用者A使用者B都可以透過同一臺電腦的瀏覽器,登入某個購物網站選東西。

那麼使用者A如何保證自己在伺服器中找到的是使用者A購物車的資料而不是使用者B的資料呢?

就需要使用到Session了。

②Session怎麼使用?

使用者A訪問伺服器:

先會自動建立一個唯一的SessionID。

然後將SessionID儲存到Cookie中。

最後將Cookie響應到瀏覽器。

使用者A再次訪問伺服器時,會根據Cookie找到對應的SessionID。

使用者B訪問伺服器時,其Cookie中沒有Session資料,就會新建立一個新的SessionID。

等於是說:SessionID是和使用者繫結的,這樣就不會出現使用者之間資料弄混的情況了。

2Session基本API

若是沒有它,很多網站都會沒法登入

①getSession()方法

其引數一共有三種情況:

無引數時:若是有Session就獲取當前Session,若是沒有就建立新的Session。

引數為true:同無引數時的效果。

引數為false:若是沒有Session不會建立,會返回null。

②getId()方法

不用多說,其獲取的也就是當前session的id。

③invalidate()方法

invalidate,翻譯過來就是使之無效的意思。

也就是說該Session對應的id無效了,再次使用getSession()時會重新生成一個新的id。

其中可以使用getSession(false)方法來判斷,如果結果為null即id失效了。

最後

時間和精力各方面都受限,Cookie和Session的知識點並沒有學全面。

單獨再花一天去學又會拖學習進度,魚與熊掌不可兼得,只能捨棄一部分了,留待以後再總結吧。

謝謝你的觀看。

如果可以的話,麻煩幫忙點個贊,謝謝你