Cookie與Session

衆所周知,我們瀏覽器與服務器之間的交流是通過Http(TCP/IP的應用層協議,超文本傳輸協議)協議約定的,一次請求對應一次響應

Http協議是一個無狀態協議,意味着每一次的請求都是獨立的,後續處理無法獲取之前的數據,無法實現數據之間的共享,所以需要時就只能通過重傳,但是這樣會導致每次連接傳送的數據量增大

現在我們來說一說解決方案:

1、使用參數傳遞機制,使用get傳遞,可以將參數拼接在URL之後,但是這種方式不安全,傳遞的參數數量有限

2、使用Cookie技術

3、使用Session技術

一、Cookie技術

*特點:客戶端的技術,將共享數據保存在客戶端(瀏覽器)中

           Cookie可以分爲內存Cookie(非持久cookie)和硬盤Cookie(持久Cookie)

*cookie操作:

1、創建cookie對象,設置共享數據:Cookie c = new Cookie(String name,String value);但是一個cookie只能存儲一個字符串類型的數據,不能存儲其他類型的數據

2、將Cookie響應給瀏覽器:response對象.addCookie(cookie對象)

3、獲取請求中的Cookie信息:Cookie[] cs = request對象.getCookies();

for(Cookie c:cs){

     if("username".equals(c.getName())){

          String value = c.getValue();

      }

}

4、修改Cookie中的共享數據

(1)重新創建一個新的cookie,名稱和要修改的數據一致

(2)先獲取到要修改的cookie對象,在調用setValue(String newValue)重新設置,修改cookie中的數據,需要再次發送給瀏覽器

5、cookie的生命週期

默認:在關閉瀏覽器的時候銷燬Cookie對象

語法:void setMaxAge(int expiry)

expiry > 0:設置 Cookie 對象能夠存活 expiry 秒,即使關閉瀏覽器,也不影響 Cookie 中的共享數據,比如設置一個月:setMaxAge(60*60*24*30);
expiry = 0:立即刪除當前的 Cookie 信息,通過setMaxAge(0)來實現
expiry < 0:關閉瀏覽器時銷燬

6、Cookie中的key和value不支持中文

設置Cookie時需要對中文字符串進行編碼,在獲取時進行解碼

7、Cookie的路徑和域範圍可以進行設置

*Cookie的缺陷:

(1)獲取Cookie信息比較麻煩

(2)Cookie不支持中文

(3)一個Cookie只能存儲一個字符串類型的數據

(4)Cookie在瀏覽器中有大小和數量的限制

(5)共享數據時保存在瀏覽器中容易造成數據的泄露,不安全

二、Session技術

特點:服務器端技術,將數據保存在服務器

理解:cookie可以讓服務器端程序跟蹤每個客戶端的訪問,但是每次客戶端的訪問必須重新回傳cookie到服務器上,cookie很多時就會增加客戶端與服務器的數據傳輸量,session就是用以解決這個問題的

          同一個客戶端每次與服務器交互時,不需要每次都回傳有所得cookie值,而只需要回傳一個id,這個id是用戶第一次訪問時產生的,而且每個客戶端都是唯一的,這個id通常是name爲jsesionid的一個cookie

session基本操作

1、獲取session對象:request.getSession()

2、設置共享數據:session對象.setAttribute(String name,Object value)

注意:session可以存儲任何類型的數據

3、修改共享數據:重新設置一個同名的共享數據

4、獲取共享數據:Object value = Session對象.getAttribute(String name);

5、刪除Session中的共享數據Session.removeAttribute(String name);

6、銷燬session:void invalidate()

7、session的超時管理

      超時:在訪問當前資源的過程中,不和網頁進行任何的交互,超過設定的時間即爲超時

      tomocat服務器中默認的配置爲30分鐘

      語法:void setMaxInactiveInterval(int interval) 

參考:https://www.cnblogs.com/wmyskxz/p/8805489.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章