一、Session
1、什麼是session:session對象是一個JSP內建對象,它在第一個JSP頁面被裝載時自動建立,完成會話期管理。
從一個客戶開啟瀏覽器並串連到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。當一個客戶訪問一個伺服器時,可能會在這個伺服器的幾個頁面之間反覆串連,反覆重新整理一個頁面,伺服器應當通過某種辦法知道這是同一個客戶,這就需要session對象。
2、session對象的ID:當一個客戶首次訪問伺服器上的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發送到用戶端,存放在Cookie中,這樣session對象和客戶之間就建立了一一對應的關係。當客戶再訪問串連該伺服器的其他頁面時,不再分配給客戶新的session對象,直到客戶關閉瀏覽器後,伺服器端該客戶的session對象才取消,並且和客戶的會話對應關係消失。當客戶重新開啟瀏覽器再串連到該伺服器時,伺服器為該客戶再建立一個新的session對象。
3、session的生存周期:對象存在一定時間到期問題,所以存在session中的名值對會在一定時間後失去,可以通過更改session有效時間來避免這種情況。同時編程時盡量避免將大量有效資訊儲存在session中,request是一個不錯的替代對象。
二、Cookie
1、什麼是Cookie:指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。所以Cookie由伺服器端產生,儲存在用戶端(瀏覽器),瀏覽器會將Cookie的key/value儲存在文字檔內,下次訪問同一網站時就會將cookie發送給瀏覽器。Cookie名稱和值可以由伺服器端開發自己定義,對於JSP而言也可以直接寫入jsessionid,這樣伺服器可以知道該使用者是否合法使用者以及是否需要重新登入等,伺服器可以設定或讀取Cookies中包含資訊,藉此維護使用者跟伺服器會話中的狀態。
2、Cookie的常用方法:Cookies最典型的應用是判定註冊使用者是否已經登入網站。另一個重要應用場合是“購物車”之類處理,使用者可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些資訊都會寫入Cookies,以便在最後付款時提取資訊。
3、Cookie的生存周期:Cookie可以保持登入資訊到使用者下次與伺服器的會話,換句話說,下次訪問同一網站時,使用者會發現不必輸入使用者名稱和密碼就已經登入了。而還有一些Cookie在使用者退出會話的時候就被刪除了,這樣可以有效保護個人隱私。
三、Session與Cookie的聯絡
HTTP協議是無狀態的,對於一個瀏覽器發出的多次請求,WEB伺服器無法區分 是不是來源於同一個瀏覽器。 所以,為了實現會話,服務端需要一個會話標識ID能儲存到瀏覽器,讓它在後續的請求時都帶上這個會話標識ID,以便讓服務端知道 某個請求屬於哪個會話,這樣便可以維護與會話相關的狀態資料。由於Cookie對於使用者來說,是個不可見的東西,而且每次請求都會傳遞到服務端,所以它就是很理想的會話標識ID的儲存容器。
四、Web伺服器跟蹤客戶狀態
1,建立含有跟蹤資料的隱藏欄位 type=hidden
2,重寫包含額外參數的URL
3,使用持續的Cookie
4,使用Servlet API中的Session(會話)機制
五、Session的介面HttpSession
getId() 返回session的ID
Invalidate() 讓當前session失效,Servlet容器會釋放HttpSession對象佔用的資源
getAttribute() setAttribute()
isNew() 判斷是否是新建立的session,如果是返回true 否則返回false
setMaxInactiveInterval() 設定session的最大有效時間 單位為秒 如果設定為負數,表示不限制session處於不活動狀態的最大有效時間,預設的設定時間為30分鐘