servlet學習(六)Session
一、問題
一個使用者的不同請求處理如何共享資料?
二、解決
使用session技術
三、原理
session技術是依賴cookie技術的服務端的資料儲存技術。使用者第一訪問伺服器的時候,伺服器會建立一個session物件給使用者,並將session物件的JSESSIONID使用cookie技術儲存給瀏覽器中,保證使用者的其他請求能夠獲取到同一個session物件,也保證了不同請求能夠獲取到共享資料。
四、使用:
1.建立session物件
//建立session物件
HttpSession hs=req.getSession();
2.儲存資料到session物件
//儲存資料到session物件
hs.setAttribute("name", "linyu");
3.獲取session物件中的資料
//設定session的失效時間 單位:s
hs.setMaxInactiveInterval(3600);
//從session物件中獲取資料
String name=(String) hs.getAttribute("name");
System.out.println(name);
//強制讓session失效
hs.invalidate();
特點:
1.儲存在伺服器端,在伺服器進行建立。
2.依賴cookie技術,臨時儲存在一次會話中,瀏覽器一關就沒有了。
3.預設儲存時間是30分鐘。(主要是tomcat的web.xml中的配置有30這個預設值)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
注意:
1.如果servlet中沒有呼叫request.getSession()方法,那麼伺服器永遠都不會建立JSESSIONID。
2.如果servlet中呼叫request.getSession()方法那麼情況分為以下兩種情況:
2.1 如果是第一次訪問servlet,那麼request.getSession()會建立一個JSESSIONID,並且在響應頭裡面有設定:
Set-Cookie:JSESSIONID=********************************; Path=/虛擬專案名; HttpOnly
2.2 如果不是第一訪問servlet,那麼此次瀏覽器訪問該專案的時候,請求頭會帶有:
Cookie:JSESSIONID=*********************************
request.getSession()會先去獲取請求頭的JSESSIONID,並且在伺服器裡面查詢該ID,如果該session物件還存活(tomcat預設session的存活時間為30分鐘,過了30分鐘後,該session物件會被摧毀)則直接獲取該session,如果該session已經被摧毀了,則重新又建立一個session物件,重複步驟2.1.
注意:jsp預設呼叫getSession()方法。