方式一:
在web.xml中設置session-config如下:
<session-config>
<session-timeout>2</session-timeout>
</session-config>
即客戶端連續兩次與服務器交互間隔時間最長為2分鍾,2分鍾后session.getAttribute()獲取的值為空
API信息:
session.getCreationTime() 獲取session的創建時間
session.getLastAccessedTime() 獲取上次與服務器交互時間
session.getMaxInactiveInterval() 獲取session最大的不活動的間隔時間,以秒為單位120秒。
<!-- 登錄狀態過濾,可以過濾掉不需要進行超時驗證的url -->
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.software.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!---以上代碼指明具體的路徑,具體的代碼見附錄>
方式二:
在Tomcat的/conf/web.xml中session-config,默認值為:30分鍾
<session-config>
<session-timeout>30</session-timeout>
</session-config>
方式三:
在Servlet中設置
HttpSession session = request.getSession();
session.setMaxInactiveInterval(60);//單位為秒
說明:
1.優先級:Servlet中API設置 > 程序/web.xml設置 > Tomcat/conf/web.xml設置
2.若訪問服務器session超時(本次訪問與上次訪問時間間隔大於session最大的不活動的間隔時間)了,即上次會話結束,但服務器與客戶端會產生一個新的會話,之前的session里的屬性值全部丟失,產生新的sesssionId
3.客戶端與服務器一次有效會話(session沒有超時),每次訪問sessionId相同,若代碼中設置了session.setMaxInactiveInterval()值,那么這個session的最大不活動間隔時間將被修改,並被應用為新值。
4.Session的銷毀(代表會話周期的結束):在某個請求周期內調用了Session.invalidate()方法,此請求周期結束后,session被銷毀;或者是session超時后自動銷毀;或者客戶端關掉瀏覽器
5.對於JSP,如果指定了<%@ page session="false"%>,則在JSP中無法直接訪問內置的session變量,同時也不會主動創建session,因為此時JSP未自動執行request.getSession()操作獲取session。
附錄:
package com.software.filter; import java.io.IOException; import java.io.PrintWriter; import java.util.HashSet; import java.util.Set; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.software.pojo.LoginInfo; import com.software.util.AjaxResultHelper; public class LoginFilter implements Filter { String [] noFilter = {"/collect/collectSensorData","/user/registerpage","/user/register","/user/checklogin","/system/login","/system/registerpage","/breedingLog/loadImages", "/expert/expertList","/expert/getNewQuestionsByPage","/expert/getHostQuestionsByPage","/product/productList","/product/productDetail","/product/feedList","/product/feedDetail", "/product/drugList","/product/drugDetail","/product/seedList","/product/seedDetail","/product/commonList","/product/commonDetail","/user/userInfo","/user/getDealtAnswer", "/user/getWaitReply"}; private Set<String> noFilterSet = new HashSet<String>(); private Logger log = Logger.getLogger(LoginFilter.class); @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; String nofilterpage = request.getServletPath(); //log.info("nofilterpage:"+nofilterpage); if(noFilterSet.contains(nofilterpage) || nofilterpage.startsWith("/res") || nofilterpage.equals("/index.jsp")){//放行 //放行 //log.info("nofilterpage:"+nofilterpage); arg2.doFilter(request, response); }else{ LoginInfo loginInfo =(LoginInfo) request.getSession().getAttribute("loginInfo"); if(null == loginInfo ){ JSONObject responseJSONObject = (JSONObject)JSON.toJSON(AjaxResultHelper.getErrorRes(0,"未登錄",null,0)); PrintWriter out = null; response.setCharacterEncoding("UTF-8"); try { out = response.getWriter(); out.append(responseJSONObject.toString()); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { out.close(); } } // String path = request.getContextPath(); // String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path; // response.sendRedirect(basePath + "/system/login"); // response.sendRedirect(basePath + "/system/overtime"); }else{ AjaxResultHelper.getSuccessRes(); arg2.doFilter(request, response); } } } @Override public void init(FilterConfig arg0) throws ServletException { for(String s:noFilter){ noFilterSet.add(s); } } }