會話的概念
-
會話可以簡單理解為:用戶打開一個瀏覽器,點擊多個超鏈接,訪問服務器多個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路徑進行設置,例如