Cookie
作者:Stanley 羅昊
【轉載請注明出處和署名,謝謝!】
Cookie不是內置對象,所以用的時候需要new出來,Cookie是由服務端產生的,再發送給客戶端保存,它不是內置對象,卻是由服務端產生的,產生完后給了客戶端;
它存在於客戶端,卻不是客戶端產生的,是服務端產生的,產生完后給你了
Cookie的作用
Cookie就是我們所理解的緩存,本地緩存;
比如客戶端訪問服務端,第一次訪問結束后,我就會產生一個Cookie,把這個Cookie保留到客戶端,打個比方:我第一次打開一個網頁去看一個視頻,它就需要網絡或上網流量請求服務器獲取資源,看完后服務端就會將你看的這個視頻放到一個Cookie里面,然后發送給客戶端,我下次再去看這個視頻的時候,我就無需連接網絡直接在本地即可觀看,所以這就叫服務端產生(請求資源需要請求對應視頻的服務器),發送給客戶端(請求完畢后【就是看完后】,將資源保存到本地);有點兒像一邊看一邊下載。
但是它有缺點,它除了能放視頻它還能放電影、音樂、文章甚至我們的密碼也能放,用戶名信息也能放,所以放一些用戶信息就比較危險了,比方說我第一次訪問網站,我登錄了,我的名字叫張三,密碼abc,服務端將我的信息放到Cookie里面再發送給客戶端,那我以后確實不需要登錄了,我就可以直接在本地讀取賬號密碼登錄,這樣就不安全了,萬一別人用你電腦解析破解了。
所以Cookie能提高訪問服務端的效率,但是安全性較差!
Cookie內部細節
Cookie內部包含一個key = value,有點像JSON跟MAP,既然它不是內置對象,那是誰提供的呢?
是一個擴展類:java.servlet.http.Cookie對象就是由這個類產生的,類產生對象,這些類跟這些對象的方法:
首先有一個構造方法,public Cookie(String key String value),通過構造方法,你可以寫k你也可以寫v;
String getName(),這個方法用來獲取構造方法里面的key
String getValue(),這個就用來獲取里面的值 Value
還有一個Void setMaxAge(int expiry),這個方法是設置最大有效期(單位是 秒)該方法說明:
我現在服務端把一個文件生成一個Cookie發給客戶端了,但是它有時間限制,比如規定,30分鍾內有效,超過就失效
准備Cookie 增加Cookie 發送Cookie 獲取Cookie
1.在服務端准備Cookie
因為是構造方法,直接賦值即可,這里我們就模擬用戶名=zs
密碼=abc
2.增加Cookie
服務端發送給客戶端需要一個內置對象:response.addCookie(Cookie cookie),把對象放進去即可,比如用戶的信息做登錄保存賬號密碼的時候用
3.發送Cookie
直接將頁面跳轉(轉發 重定向都可以),比如說我現在服務端有一個Cookie了,我現在不管用轉發還是重定向到第二個頁面了,那我第二個頁面就需要獲取該Cookie
Cookie最終要到客戶端去,所以我們開始發送Cookie到客戶端(轉發 重定向都可以,總之你跳轉過去就行了):
我這里讓它跳到了result.jsp頁面了
4.獲取Cookie
使用request.getCookie();
因為我們不能獲取單個,所以返回必定是數組,獲取后我們需要循環遍歷出來,這里就假設result.jsp是客戶端,因為客戶端需要獲取Cookie:
因為有key value對,所以我們獲取時候也需要全部獲取並且打印出來,獲取key就cookie.getName(),獲取value也就是值 cookie.getValue()即可;
值得注意的是,要獲取Cookies不能獲取某一個Cookie,只能獲取全部Cookie,因為現在還沒有提供獲取單個Cookie的,比方說我現在客戶端放了好多Cookie比如什么視頻、用戶名密碼、圖片,我客戶端要獲取就必須一次全拿到然后后遍歷
假設剛才現在客戶端現在需要訪問服務端,服務端就是我們准備並且增加Cookie的那個頁面,在那個頁面上我有重定向,重定向到了客戶端打印輸出了,我們看一下運行結果:
很明顯,我們成功的獲取到了服務端發來的Cookie;
下面這個則是JSessionId,每一個Cookies都會有一個Name為JSessionId,它也是有key v 對。
今日感悟:
不要為了取悅他人而自我犧牲,
比如你為了家庭和睦取悅父母,為了寢室團結取悅舍友,為了情侶和諧取悅對象,
這樣你的情緒就會一直被別人所支配,一直活在別人的脅迫之下,到最后你就明白,你所認為的犧牲,
在別人眼里,其實一文不值