1. 程式人生 > >servlet學習(六)Session

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()方法。