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