1. 程式人生 > >Cookie及通過Cookie常見應用

Cookie及通過Cookie常見應用

會話的概念

  • 會話可以簡單理解為:使用者開啟一個瀏覽器,點選多個超連結,訪問伺服器多個web資源,然後關閉瀏覽器,整個過程稱之為一個會話。
    會話需要解決的問題

  • 每個使用者與伺服器進行互動的過程中,各自會有一些資料,程式要想辦法儲存每一個使用者的資料。

  • 例如:使用者點選超連結通過一個servlet購買了一個商品,程式應該儲存使用者購買的商品,以便於使用者點結賬servlet時,結賬servlet可以得到使用者商品為使用者結賬。
  • 使用者購買的商品儲存在request或servletContext中行不行?

    這裡寫圖片描述

儲存會話資料的兩種技術(web通用的技術)

  • Cookie是客戶端技術
    ,cookie是小段文字資訊,在網路伺服器上生成,併發送給瀏覽器。通過使用cookie可以標識使用者身份,記錄使用者名稱和密碼,跟蹤重複使用者等。瀏覽器將cookie以key/value的形式儲存到客戶機的某個指定目錄中。
  • Session是伺服器端技術,利用這個技術,伺服器在執行時可以為每一個使用者的瀏覽器建立一個其獨享的session物件,由於session為使用者瀏覽器獨享,所以使用者在訪問伺服器的web資源時,雅思分數可以把各自的資料放在各自的session中,當用戶再去訪問伺服器中的其它web資源時,其它web資源再從使用者各自的session中取出資料為使用者服務。

這裡寫圖片描述
注:cookie原理中使用者分別傳送了三次請求(電視,手機,結賬);上述原理圖中最大的區分點在資訊的儲存位置(客戶端or服務端)

管理HTTP協議會話狀態 :Cookie 和Session
Cookie:將使用者相關資料,儲存客戶端 , 使用者每次訪問伺服器自動攜帶cookie資料
Session : 將使用者相關資料,儲存伺服器端,為每個客戶端生成一個獨立Session資料物件,雅思週末班通過物件唯一編號,區分哪個瀏覽器對應哪個Session。

Cookie技術
這裡寫圖片描述

接下來我們通過cookie來實現一個檢視訪問時間的案例:
這裡寫圖片描述
(客戶端收到訪問時間,瀏覽器會將其快取起來,下一次訪問時,會自動讀取時間,在請求中攜帶一個訪問時間的頭資訊)

為了能夠使使用者直觀地知道是否是第一次訪問,我們在使用者第一次訪問時顯示一個歡迎介面,這裡會用到response.setContentType()方法(response.setContentType(MIME)的作用是使客戶端瀏覽器,

武漢出國中介區分不同種類的資料,並根據不同的MIME呼叫瀏覽器內不同的程式嵌入模組來處理相應的資料。),例如

  • response.setContentType(“text/html; charset=utf-8”); html
  • .setContentType(“text/plain; charset=utf-8”); 文字
  • text/javascript json資料
  • application/xml xml資料

如果cookie已經存在,即不是第一次訪問,需要獲得最後的訪問時間

Cookie獲得訪問時間小結
1、通過伺服器向客戶端寫cookie
Cookie cookie=new Cookie(name,value);
response.addCookie(cookie);
* 在HTTP協議響應頭資訊中 Set-Cookie: last=1339556457609

2、當客戶端存在cookie之後,以後每次請求自動攜帶 HTTP協議請求頭資訊 Cookie: last=1339556456859
伺服器端獲得需要cookie資料
Cookie[] cookies=request.getCookies(); —- 獲得客戶端所有cookie
if(cookies==null){} 判斷cookie是否存在

遍歷cookie獲得需要資訊

CookieAPI 詳解
1、將cookie寫回客戶端 response.addCookie(cookie);
2、讀取請求中 cookie資訊 request.getCookies();
3、Cookie物件建立 new Cookie(name,value )
* cookie的name 不允許改變 —– getName 、getValue 、setValue*

什麼是會話cookie ,什麼是持久cookie ?

  • cookie資訊預設情況,儲存在瀏覽器記憶體中 —— 會話cookie,會話cookie 會在關閉瀏覽器時清除 (預設情況下是會話cookie)
  • 持久Cookie,cookie資料儲存客戶端硬碟上,通過setMaxAge 設定Cookie為持久Cookie(API:void setMaxAge(int expiry);//Sets the maximum age in seconds for this Cookie),例子:小學英語詞彙登入網站時,會出現兩個月之內自動登入之類的功能
    * 在JavaAPI 中所有與時間相關引數,int 型別 單位秒, long型別 單位毫秒

訪問cookie有效路徑path:預設情況下,生成cookie時,產生預設有效訪問路徑 (預設生成cookie程式路徑),會在對應位置生成一個文字文件

第二次訪問程式攜帶cookie資訊,如果訪問路徑與path不一致,不會攜帶cookie 資訊 (不同的路徑得到不同資訊)
company cookie : path — /day07/serlvet
last cookie : path — /day07

訪問 :http://localhost/day07/servlet/path —- 同時滿足/day07/serlvet、/day07 攜帶 company 和 last兩個cookie資訊
訪問 :http://localhost/day07/lastvisit —- 滿足 /day07 不滿足/day07/serlvet 攜帶 last 一個cookie 資訊
注意:程式開發,儘量使用setPath手動對Path路徑進行設定,例如