會話技術
會話技術
1. 什麼是會話技術?
為了實現某一功能,瀏覽器和服務器之見可能會產生多次請求和響應,從瀏覽器訪問服務器開始,到最後訪問結束,期間產生的多次請求和響應加在一起,稱之為一次會話。一個值得關心的問題是如何保存會話中產生的數據。有如此啊兩類技術可以解決這個問題。
2. Cookie
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彌補了這一塊的能力。