若是沒有它,很多網站都會沒法登入
今天是劉小愛自學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的知識點並沒有學全面。
單獨再花一天去學又會拖學習進度,魚與熊掌不可兼得,只能捨棄一部分了,留待以後再總結吧。
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你