1. 程式人生 > >JavaWeb(四)--保持Http狀態的四種方式:URL重寫、隱藏域、Session和cookie

JavaWeb(四)--保持Http狀態的四種方式:URL重寫、隱藏域、Session和cookie

一、前言:

HTTP是無狀態的。因此在預設狀態下,伺服器是不知道一個Http請求是否是來自第一次訪問的專案。

因而有如下四種方法可以保持http的狀態

  1. URL重寫
  2. 隱藏域
  3. cookie
  4. httpsession物件

二、cookie

2-1:不足之處

使用者可以通過設定他的瀏覽器來拒絕接受cookie

cookie中不能存中文

2-2:概述

  1. 客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客 戶端瀏覽器頒發一個Cookie。
  2. 客戶端瀏覽器會把Cookie儲存起來。
  3. 當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務 器。
  4. 伺服器檢查該Cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改Cookie的內容。

2-3使用方法

2-3-1原始的方法

通過response傳送set-cookie,用request獲得cookie請求頭

2-3-2 便捷方法

使用response的addcookie()方法向瀏覽器儲存cookie

使用response的getcookies()方法獲得瀏覽器歸還的cookie

2-4:cookie屬性

  1. name和value  鍵值對
  2. maxAge:cookie的最大生命週期時間,cookie保留的時間(秒為單位)
    1. maxAge>0 cookie儲存有效時長;cookie儲存在客戶機的硬碟
    2. maxAge=0,  cookie儲存在記憶體
    3. maxAge<0  cookie不儲存,馬上刪除
  3. PATH(cookie路徑)
    1. 由伺服器建立cookie時,設定。
    2. 當客戶端訪問伺服器的路徑,需歸還cookie給伺服器是由Path決定。
      1. 當瀏覽器訪問伺服器,若路徑包含某個cookie路徑,則歸還cookie
    3. path的預設值是當前訪問路徑的父路徑。

三、HTTPSession

HTTPSession底層依賴cookie或者URL重寫

會話:一個使用者對伺服器的多次連貫性請求,使用者多次請求之間未關閉瀏覽器

會話範圍:是某個使用者從首次訪問伺服器開始直到使用者關閉瀏覽器。

伺服器會為每個客戶端建立一個session物件,session好比客戶在伺服器端的賬戶,被伺服器儲存在一個Map中(session快取)

在web.xml中配置session的最大不活動時間;

<session-config>
<session-time>30</session-time>
</session-config>

3-1獲得session物件

  1. Servlet中
    1. HTTPSession session = request.getsession(); 
    2. HTTPSession session = request.getsession(true);   //同1一樣
    3. HTTPSession session = request.getsession(false);  //若session快取中無該session。則返回null
  2. JSP中無需建立直接用session。(JSP九大內建物件之一)

3-2相關方法

  1. void setAttribute(String name,Object value);
  2. Object getAttribute(String name);
  3. void removeAttribute(String name);  //前三個都是域操作
  4. String getId()  //獲得sessionID
  5. int getMaxInactiveInterval()  //獲得最大不活動時間
  6. void invalidate()  //使得session失效,並建立新的session和sessionID
  7. boolean isnew()  //檢視該session是否剛建立,(建立後,伺服器無響應客戶端sessionID)