什麼是Session,Session常用API
什麼是Session:Session 是另一種記錄瀏覽器狀態的機制。不同的是Cookie儲存在瀏覽器中,Session儲存在伺服器中。使用者使用瀏覽器訪問伺服器的時候,伺服器把使用者的資訊以某種的形式記錄在伺服器,這就是Session.
如果說Cookie是檢查使用者身上的”通行證“來確認使用者的身份,那麼Session就是通過檢查伺服器上的”客戶資訊明細表“來確認使用者的身份的。Session相當於在伺服器中建立了一份“客戶資訊明細表”。
為什麼要使用Session技術?
Session比Cookie使用方便,Session可以解決Cookie解決不了的事情【Session可以儲存物件,Cookie只能儲存字串】。
Session API
-
long getCreationTime();【獲取Session被建立時間】
-
String getId();【獲取Session的id】
-
long getLastAccessedTime();【返回Session最後活躍的時間】
-
ServletContext getServletContext();【獲取ServletContext物件】
-
void setMaxInactiveInterval(int var1);【設定Session超時時間】
-
int getMaxInactiveInterval();【獲取Session超時時間】
-
Object getAttribute(String var1);【獲取Session屬性】
-
Enumeration getAttributeNames();【獲取Session所有的屬性名】
-
void setAttribute(String var1, Object var2);【設定Session屬性】
-
void removeAttribute(String var1);【移除Session屬性】
-
void invalidate();【銷燬該Session】
-
boolean isNew();【該Session是否為新的】
Session有著request和ServletContext類似的方法。其實Session也是一個域物件。Session作為一種記錄瀏覽器狀態的機制,只要Session物件沒有被銷燬,Servlet之間就可以通過Session物件實現通訊.
通過Session簡單實現Serclet之間的通訊
1public class ServletSessonTest01 extends HttpServlet {
2 @Override
3 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4 //從request獲得Session物件
5 HttpSession httpSession = req.getSession();
6 //設定Session的屬性
7 httpSession.setAttribute("name","九月");
8 }
9}
在另一個Servlet獲得Session資料
1public class ServletSessonTest02 extends HttpServlet {
2 @Override
3 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4 //從request獲取HttpSession物件
5 HttpSession httpSession = req.getSession();
6 //獲取從ServletSessonTest01設定的Session物件值
7 String value = (String) httpSession.getAttribute("name");
8 long time =httpSession.getCreationTime();
9 String sessionId = httpSession.getId();
10 System.out.println("value: "+value);
11
12 }
13}
控制檯輸出:
1value: 九月
一般來講,當我們要存進的是使用者級別的資料就用Session,那什麼是使用者級別呢?只要瀏覽器不關閉,希望資料還在,就使用Session來儲存.
Session的生命週期
1value: 九月
2getMaxInactiveInterval: 1800
第一種方式:在tomcat/conf/web.xml檔案中設定,時間值為10分鐘,所有的WEB應用都有效.
1value: 九月
2getMaxInactiveInterval: 600
第二種方式:在單個的web.xml檔案中設定,時間值為10分鐘,對單個web應用有效,如果有衝突,以自己的web應用為準。·
1 <session-config>
2 <session-timeout>10</session-timeout>
3 </session-config>
第三種方式:通過setMaxInactiveInterval()方法設定
1 //從request獲得Session物件
2 HttpSession httpSession = req.getSession();
3 //設定Session的屬性
4 httpSession.setAttribute("name","九月");
5 //設定Session最長超時時間為60秒,這裡的單位是秒
6 httpSession.setMaxInactiveInterval(60);
1value: 九月
2getMaxInactiveInterval: 60
Session的有效期
-
-
Session的有效期是指不活動的時間,如果我們設定是60s,在60s之前,沒有訪問Session,
Session屬性失效,若你在60s再次訪問過Session,則重新計時。 -
如果重啟了tomcat,reload web應用,或者關機了,Session也會失效。如果希望某個Session失效,可以使用removeAttribute()設定。
-
Cookie的生命週期按累計的時間來計算的。
-
Session在使用者第一次訪問伺服器Servlet,JSP等動態資源時就會被自動建立,Session物件儲存在記憶體裡,這也就為什麼上面的例子可以直接使用request物件獲取得到Session物件。
-
如果訪問HTML,IMAGE等靜態資源Session不會被建立。
-
Session生成後,只要使用者繼續訪問,伺服器就會更新Session的最後訪問時間,無論是否對Session進行讀寫,伺服器都會認為Session活躍了一次。
-
由於會有越來越多的使用者訪問伺服器,因此Session也會越來越多。為了防止記憶體溢位,伺服器會把長時間沒有活躍的Session從記憶體中刪除,這個時間也就是Session的超時時間。
-
Session的超時時間預設是30分鐘。有三種方式可以對Session的超時時間進行修改。
-
1value: 九月
2getMaxInactiveInterval: 1800
第一種方式:在tomcat/conf/web.xml檔案中設定,時間值為10分鐘,所有的WEB應用都有效.
1value: 九月
2getMaxInactiveInterval: 600
第二種方式:在單個的web.xml檔案中設定,時間值為10分鐘,對單個web應用有效,如果有衝突,以自己的web應用為準。·
1 <session-config>
2 <session-timeout>10</session-timeout>
3 </session-config>
第三種方式:通過setMaxInactiveInterval()方法設定
1 //從request獲得Session物件
2 HttpSession httpSession = req.getSession();
3 //設定Session的屬性
4 httpSession.setAttribute("name","九月");
5 //設定Session最長超時時間為60秒,這裡的單位是秒
6 httpSession.setMaxInactiveInterval(60);
1value: 九月
2getMaxInactiveInterval: 60
Session的有效期
-
Session的有效期是指不活動的時間,如果我們設定是60s,在60s之前,沒有訪問Session,
Session屬性失效,若你在60s再次訪問過Session,則重新計時。 -
如果重啟了tomcat,reload web應用,或者關機了,Session也會失效。如果希望某個Session失效,可以使用removeAttribute()設定。
-
Cookie的生命週期按累計的時間來計算的。