JavaWeb(四)--保持Http狀態的四種方式:URL重寫、隱藏域、Session和cookie
阿新 • • 發佈:2018-12-25
一、前言:
HTTP是無狀態的。因此在預設狀態下,伺服器是不知道一個Http請求是否是來自第一次訪問的專案。
因而有如下四種方法可以保持http的狀態
- URL重寫
- 隱藏域
- cookie
- httpsession物件
二、cookie
2-1:不足之處
使用者可以通過設定他的瀏覽器來拒絕接受cookie
cookie中不能存中文
2-2:概述
- 客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客 戶端瀏覽器頒發一個Cookie。
- 客戶端瀏覽器會把Cookie儲存起來。
- 當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務 器。
- 伺服器檢查該Cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改Cookie的內容。
2-3使用方法
2-3-1原始的方法
通過response傳送set-cookie,用request獲得cookie請求頭
2-3-2 便捷方法
使用response的addcookie()方法向瀏覽器儲存cookie
使用response的getcookies()方法獲得瀏覽器歸還的cookie
2-4:cookie屬性
- name和value 鍵值對
- maxAge:cookie的最大生命週期時間,cookie保留的時間(秒為單位)
- maxAge>0 cookie儲存有效時長;cookie儲存在客戶機的硬碟
- maxAge=0, cookie儲存在記憶體
- maxAge<0 cookie不儲存,馬上刪除
- PATH(cookie路徑)
- 由伺服器建立cookie時,設定。
- 當客戶端訪問伺服器的路徑,需歸還cookie給伺服器是由Path決定。
- 當瀏覽器訪問伺服器,若路徑包含某個cookie路徑,則歸還cookie
- path的預設值是當前訪問路徑的父路徑。
三、HTTPSession
HTTPSession底層依賴cookie或者URL重寫
會話:一個使用者對伺服器的多次連貫性請求,使用者多次請求之間未關閉瀏覽器
會話範圍:是某個使用者從首次訪問伺服器開始直到使用者關閉瀏覽器。
伺服器會為每個客戶端建立一個session物件,session好比客戶在伺服器端的賬戶,被伺服器儲存在一個Map中(session快取)
在web.xml中配置session的最大不活動時間;
<session-config>
<session-time>30</session-time>
</session-config>
3-1獲得session物件
- Servlet中
- HTTPSession session = request.getsession();
- HTTPSession session = request.getsession(true); //同1一樣
- HTTPSession session = request.getsession(false); //若session快取中無該session。則返回null
- JSP中無需建立直接用session。(JSP九大內建物件之一)
3-2相關方法
- void setAttribute(String name,Object value);
- Object getAttribute(String name);
- void removeAttribute(String name); //前三個都是域操作
- String getId() //獲得sessionID
- int getMaxInactiveInterval() //獲得最大不活動時間
- void invalidate() //使得session失效,並建立新的session和sessionID
- boolean isnew() //檢視該session是否剛建立,(建立後,伺服器無響應客戶端sessionID)