1. 程式人生 > 實用技巧 >Cookie和Session

Cookie和Session

Cookie和Session

1. 會話

會話:使用者打開了一個瀏覽器,點選了很多超連結,訪問多個web資源,關閉瀏覽器,這個過程可以稱之為會話

有狀態會話:一個同學來過教室,下次再來教室,我們會知道這個同學曾經來過,稱之為有狀態會話

你 學校

你能怎麼證明你是學校的學生?

  1. 發票 學校給你發票
  2. 學校登記 學校標記你來過了

一個網站,證明證明你來過?

客戶端 服務端

  1. 服務端給客戶端一個信件,客戶端下次訪問服務端帶上信件就可以了;cookie
  2. 伺服器登記你來過了,下次你來的時候我來匹配你;session

2. 儲存會話的兩種技術

cookie

  • 客戶端技術 (響應,請求)

session

  • 伺服器技術,利用這個技術,可以儲存使用者的會話資訊。我們可以把資訊或者資料放在session中

常見場景:網站登陸之後,下次不用再登入了,第二次直接就訪問上去了

  1. 從請求中拿到cookie資訊
  2. 伺服器響應給客戶端cookie
Cookie[] cookies = req.getCookies();	//獲得cookie
cookie.getName();	//獲得cookie中的key
cookie.getValue();	//獲得cookie中的value
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");	//新建一個cookie
cookie.setMaxAge(24*60*60);		//設定cookie有效期
resp.addCookie(cookie);		//響應給客戶端一個cookie

cookie:一般會儲存在本地的使用者目錄下的appdata

一個網站cookie是否存在上限?聊聊細節問題

  • 一個Cookie只能儲存一個資訊
  • 一個web站點可以給瀏覽器傳送多個cookie,最多存放20個cookie
  • Cookie大小有限制4kb
  • 300個cookie瀏覽器上限

刪除Cookie

  • 不設定有效期,關閉瀏覽器,自動失效;
  • 設定有效期時間為0;(相同的key,這樣會操作同樣的cookie)

編碼解碼:使用中文時,可能遇到亂碼問題(Tomcat版本較低),使用下面的方法編碼解碼(使用中文輸出要解碼,輸入要編碼)

URLEncoder.encode("漢字", "utf-8")		//編碼
URLDecoder.decode(cookie.getValue(), "UTF-8")	//對cookie中的value存放的漢字進行解碼

4. Session(重點)