會話技術

會話技術

1. 什麼是會話技術?

  為了實現某一功能,瀏覽器和服務器之見可能會產生多次請求和響應,從瀏覽器訪問服務器開始,到最後訪問結束,期間產生的多次請求和響應加在一起,稱之為一次會話。一個值得關心的問題是如何保存會話中產生的數據。有如此啊兩類技術可以解決這個問題。

2.1 cooie原理

  ——將會話中產生的數據保存在客戶端。

瀏覽器向服務器發送請求,其中只包含需要保存的數據,服務器獲取數據,通過set-cookie響應頭將數據響應給瀏覽器,讓其保存。
瀏覽器再次訪問服務器時,會在請求中通過cookie請求頭攜帶上次保存的數據,服務器可以根據cookie請求頭獲取數據。

2.2 實現cookie

cookie是基於set-cookie響應頭和cookie請求頭實現的。sun公司為了簡化cookie的操作,提供了一套cookie的API。

//創建cookie
Cookie cookie=new Cookie(String name,String value);
cookie.getName();
cookie.getValue();

//將cookie添加到response響應中,並發給瀏覽器
response.addCookie(cookie);

//從請求中獲取cookie,獲取請求中所有的cookie組成的數組
//注意:如果請求中沒有cookie,該方法返回值為null,時刻注意判空。
Cookie[] cookies=request.getCookies();

2.3 設置cookie的存活時間

setMaxAge(int sec); //設置存活的秒數

  cookie默認是會話級別的,是保存在了瀏覽器的內存中,瀏覽器一旦關閉,內存隨之釋放,cookie也隨之消失。

  如果設置了setMaxAge,則cookie會保存在瀏覽器對應的磁盤目錄中,這樣不會隨着瀏覽器的關閉而消失。

2.4 設置cookie的路徑

setPath(String path); 

默認路徑為當前響應的Servlet所在路徑。

設置路徑後,瀏覽器會在訪問當前設置的路徑是攜帶cookie。

通常設置為當前web應用的根路徑。

2.5 刪除cookie

沒有刪除cookie的API。

如果想刪除,則可以向瀏覽器發送一個同名,同path的cookie,並設置最大生存時間為0。

因為瀏覽器根據cookie的名字和path判斷是否為同一個cookie,所以後發的cookie會覆蓋前面的cookie,又由於生存時間為0,則會馬上刪除。

3.session

3.1 session原理

  ——將會話中產生的數據保存在服務器端。

瀏覽器向服務器發送請求,服務器接收請求參數,然後在服務器中檢查是否有為當前瀏覽器服務的session,如果有則直接拿來使用,如果沒有則創建一個session,並將數據保存在session中。
當瀏覽器再次訪問服務器時,服務器可以找到為當前瀏覽器服務的session,從中取出數據。
每個session對應一個id,此id通過cookie(臨時)保存在瀏覽器中,訪問服務器時攜帶cookie,服務器根據這個id判斷是那個session。

3. session域

【生命周期】

創建:第一次調用request.getSession()創建session對象。

銷毀:

  • 超時死亡:session默認30分鐘不適用就會超時銷毀。可以通過web.xml配置超時時間,單位為分鐘。
<session-config>
<session-timeout>1</session-timeout>
</session-config>
  • 主動殺死:可以調用session.invalidate()方法,立刻殺死session

  • 意外身亡:當服務器意外關閉時,session也會銷毀。如果是正常關閉,session會被鈍化,服務器啟動時再活化。

【作用範圍】
  整個會話

【功能】
  在整個會話範圍內共享數據

4. 補充

http協議是無狀態的,當我們在開發一些對狀態有需求的接口時,cookie和session彌補了這一塊的能力。

Tags: