Session的有效期設置


方式一:
 在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);
        }

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM