天天看點

會話及其會話技術:Cookie和Session

在 Web 開發中,伺服器跟蹤使用者資訊的技術稱為會話技術

為了儲存會話過程中産生的資料,在 Servlet 技術中,提供了 Cookie 和 Session 兩個用于儲存會話資料的對象

1.Cookie對象

1.1 什麼是Cookie

Cookie是一種會話技術,用于将會話過程中的資料儲存到使用者的浏覽器中,進而使浏覽器和伺服器可以更好地進行資料互動。

伺服器向用戶端發送 Cookie 時,會在 HTTP 響應頭字段中增加 Set-Cookie 響應頭字段。 Set-Cookie 頭字段中設定的 Cookie 遵循一定的文法格式:

Set-Cookie: user=itcast ; Path=/ ;

user 表示 Cookie 的名稱

itcast 表示 Cookie 的值

Path 表示 Cookie 的屬性

注意: Cookie 必須以鍵值對的形式存在,其屬性可以有多個,但這些屬性之間必須用分号和空格分隔。

Cookie在浏覽器和伺服器之間傳輸的過程:

當使用者第一次通路伺服器時,伺服器會在響應消息中增加 Set-Cookie 頭字段,将使用者資訊以 Cookie 的形式發送給浏覽器。

一旦使用者浏覽器接受了伺服器發送的 Cookie 資訊,就會将它儲存在浏覽器的緩沖區中。

這樣,當浏覽器後續通路該伺服器時,都會在請求消息中将使用者資訊以 Cookie 的形式發送給 Web伺服器,進而使伺服器端分辨出目前請求是由哪個使用者發出的。

1.2 Cookie API

為了封裝 Cookie 資訊,在 Servlet API 中提供了一個 javax.servlet.http.Cookie 類,該類包含了生成 Cookie 資訊和提取 Cookie 資訊各個屬性的方法。

  • Cookie的構造方法

Cookie類有且僅有一個構造方法,文法格式為:

public Cookie (java.lang.String name,java.lang.String value)
           

參數 name 用于指定 Cookie 的名稱 , value 用于指定 Cookie 的值

注意: Cookie 一旦建立,名稱不能更改,值可以更改

  • Cookie類的常用方法

通過 Cookie 的構造方法建立 Cookie 對象後,便可以調用該類的是以方法

Cookie類的常用方法

會話及其會話技術:Cookie和Session

2.Session對象

Cookie 技術可以将使用者的資訊儲存在各自的浏覽器中,并且可以在多次請求下實作資料的共享。但若傳遞的資訊較多時,使用 Cookie 技術顯然會增大伺服器端程式處理的難度。

2.1 什麼是Session

Session 是一種将會話資料儲存到伺服器端的技術。

2.2 HttpSession API

Session 是與每個請求消息緊密相關,為此,HttpServletRequest 定義了用于擷取 Session 對象的 getSession() 方法,該方法有兩種重載形式:

public HttpSession getSession(boolean create)
public HttpSession getSession()
           

第一個 getSession() 方法根據傳遞的參數來判斷是否建立新的 HttpSession 對象,若參數為 true,則在相關的 HttpSession 對象不存在是建立并放回新的 HttpSession 對象,否則不建立 HttpSession 對象,而是傳回 null。

第二個 getSession() 方法則相當于第一個方法參數為 true 時的情況,在相關的 HttpSession 對象不存在時總是建立新的 HttpSession 對象。

注意:

getSession() 方法可能會産生發送會話辨別号的 Cookie 頭字段,故必須在發送任何響應内容之前調用 個體Session() 方法。

HttpSession 接口的常用方法

會話及其會話技術:Cookie和Session

2.3Session逾時管理

在會話過程中,會話的有效時間可以在 web.xml 檔案中設定,其預設值由 Servlet 容器定義。在<Tomcat 安裝目錄>\conf\web.xml 檔案中,可以找到一段配置消息:

<session-config>
	<session-timeout>30</session-timeout>
</session-config>
           

設定的時間值是以分鐘為機關,即Tomact 伺服器的預設會話逾時間隔為 30 分鐘。

若時間值設定為 0 或負數,則表示會話永不逾時。