前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
Session一直是我們做web項目經常使用的,以前沒太注意,這次又細致的看了下!
?
1.session其實就是一個Map,鍵=值對,通過session.getAttribute("name");獲得session中設置的參數
?
2.session的過期時間是從什么時候開始計算的?是從一登錄就開始計算還是說從停止活動開始計算?
?? 答:從session不活動的時候開始計算,如果session一直活動,session就總不會過期。
???????? 從該Session未被訪問,開始計時; 一旦Session被訪問,計時清0;
?
3.設置session的失效時間
?a)web.xml中
?

- <session-config>????
- ????<session-timeout>30</session-timeout>????
- </session-config>???
?b)在程序中手動設置
??? session.setMaxInactiveInterval(30 * 60);//設置單位為秒,設置為-1永不過期
c)tomcat也可以修改session過期時間,在server.xml中定義context時采用如下定義:

- <Context?path="/livsorder"?docBase="/home/httpd/html/livsorder"??
- defaultSessionTimeOut="3600"?isWARExpanded="true"??
- isWARValidated="false"?isInvokerEnabled="true"??
- isWorkDirPersistent="false"/>??
?
4.如何判斷session過沒過期
request.getSeesion(boolean)方法,一下子讓我恍然大悟。這個方法里面傳了一個boolean值,這個值如果是true,那么如果當前的request的session不可用,那么就創建新的會話,如果存在就返回當前的會話。如果參數是false,那么在request的當前會話不存在的時候就返回null。
這樣我們就可以很容易的聯想到這個所謂的request的當前會話是否存在和session過期的聯系,所以我們就可以“近似地”認為session不存在就是session過期了,那么我們就可以很容易地判斷session是否過期了。方法如下:
if(request.getSession(false)==null)
???System.out.println("Session?has?been?invalidated!");
else
???System.out.println("Session?is?active!");
可能大家注意到我上面有一個“近似地”字眼,也就是說存在特別情況。
這個特殊情況就是第一次請求還沒有創建會話的時候,那么用這個方法返回的仍然是null,原因我想大家應該是顯然的。
?
?
- private?boolean?checkSession(???HttpServletRequest?request,??
- HttpServletResponse?response)?{??
- HttpSession?session?=?request.getSession(false);??
- String?requestURI?=?request.getRequestURI();??
- String?contextPath?=?request.getContextPath();??
- ??
- requestURI?=?requestURI.substring(contextPath.length());??
- ??
- if(requestURI.equals("/")?||??
- requestURI.equals("/login.jsp")?||??
- ????requestURI.equals("/login.do")??||??
- ????requestURI.equals(this.errorPage))??
- return?true;??
- ??
- if(session?!=?null???
- &&?session.getAttribute(this.objName)?!=?null???
- &&?session.getAttribute("year")?!=?null)??
- return?true;??
- else???
- return?false;??
- }??
?
?
?
?
比較好的一個辦法
?
- // request.getSession(false)==null可以近似的判斷是否過期:如果已經過期,那么返回的是null,
- // 但是當第一次請求,剛剛建立一個session的時候,上述方法也返回null???
- ?
- //所以應該這么做???
- if(null==request.getSession(false)){???
- ???if(request.getSession(true).isNew()){???
- ? ?}???
- else{???
- System.out.println("session已經過期");???
- }???
- }??
- ?
isNew()是指是否一個新創的session,當用戶訪問一個支持session的jsp網頁時,session被創建,盡管有時session里面并沒有任何東西。
?
?