天天看點

javaEE session詳解

1也可以記錄狀态資訊,與cookie不同,cookie是記錄在用戶端的,session是記錄在伺服器端的。

2session是伺服器哦開辟的一塊記憶體,session是與浏覽器(或子視窗)關聯在一起的,其他浏覽器通路不了。

3原理:在第一次通路伺服器的時候,伺服器會建立一個SessionID,會在伺服器的Session記憶體裡儲存SessionID,然

後把這個SessionID通過response傳回給浏覽器(浏覽器就獲得了這個SessionID),在第二次通路伺服器,浏覽器通

過request提供這個SessionID,伺服器就知道你所在的Session了,而不會通路到其他Session。

4在某段時間一連串用戶端與伺服器的“交易”,在不同的jsp頁面中保留客戶資訊的情況下使用。

5Session的兩種方式,一種使用cookie實作(把SessionID放在臨時Cookie裡面),二如果浏覽器不支援cookie,可以通

過url重寫來實作,就是将一些額外資料追加到表示會話的每個url末尾,伺服器在該辨別符與其存儲的有關的該會話的

資料之間建立關聯,如:hello.jsp?jsessionid=1234。

6可以通過程式來終止一個會話。如果用戶端在一定時間内沒有操作,伺服器會自動終止會話。

7通過HttpSession來讀寫Session。

8規則:

如果浏覽器支援Cookie,建立Session的時候會把SessionID儲存在Cookie裡面

如果不支援cookie,使用url重寫的方式實作Session,response.encodeURL():轉碼,并在RUL後面加入

SessionID。

session不像cookie擁有路徑通路的問題,session同一個application下的servlet/jsp可以共享同一個session,前提

是同一個浏覽器視窗。隻要是同一個application下建立的session就可以通路。

9建立Session:

HttpSession session = request.getSession(true);//如果沒有session建立一個,如果有session就拿到原來那個。

10getRequestedSessionId(),傳回随用戶端請求到來的會話ID,可能與目前的會話ID相同,也可能不同。

11isRequestedSessionIdFromCookie():目前的Session ID如果是從Cookie獲得,為true

12isRequestedSessionIdFromURL():目前Session ID如果是由URL獲得,為true

13isRequestedSessionIdValid():如果用戶端的會話ID代表的是有效會話,則傳回true,否則,(比如,會話過期或根

本不存在),則傳回false

14HttpSession的常用方法:

getAttrubuteNames()/getAttribute()

getCreateTime()

getId()

getMaxInactiveInterval()

invalidate()

isNew()

setAttrubute()

setMaxInactivateInterval()

15在jsp中使用session,隻要直接使用session就可以了,在第一次使用session時就會為你建立一個session。

16URL重寫跟蹤會話:伺服器将Session ID作為RUL的一部分發送給用戶端,用戶端在請求URL中再傳回來,這樣,

web伺服器就可以跟蹤會話了。

要跟蹤用戶端的會話,就需要将所有發往用戶端的URL進行編碼,這可以通過HttpServletResponse接口中的

encodeURL()方法和encodeRedirectURL()方法來實作,其中,encodeRedirectURL()方法主要是在調sendRedirect()

方法之前使用。

隻需要對所有的連結和重定向語句中的URL都調用encodeURL()和encodeRedirectURL()進行編碼就可以了,這

兩個方法在執行時,首先判斷目前的servlet是否執行了HttpSession對象的invalidate()方法,如果執行了,直接傳回參

數URL,接下來判斷用戶端是否禁用了Cookie,如果沒有禁用,則直接傳回參數URL,如果禁用了Cookie,則在參數

URL中附加Session ID,傳回編碼後的URL