設置session有效時間的三種方式
設置session有效時間的三種方式
session的默認有效時間是30分鐘(min)
方法一
使用java函數(shù):session.setMaxInactiveInterval()
舉例:
設置的有效期是30分鐘(min)
session.setMaxInactiveInterval(30 * 60); //30分*60秒
注意:以秒(s)為單位。
如果設置的值為零或負數(shù),則表示會話將永不超時!
方法二
在項目中web.xml的session-config中配置
舉例:
設置有效期為30分鐘(min)
<session-config>? ? ? <session-timeout>30</session-timeout> </session-config>?
注意:以分鐘為單位,必須為整數(shù)。
如果 session-timeout元素的值為零或負數(shù),則表示會話將永不超時!
方法三
直接在應用服務器中設置
舉例:
在tomcat安裝目錄中conf/web.xml找到<session-config>元素,tomcat默認設置是30分鐘。
注意:以分鐘為單位,必須為整數(shù)。
如果 session-timeout元素的值為零或負數(shù),則表示會話將永不超時!
這三種方法設置session有效期的優(yōu)先級(此處優(yōu)先級指的是如果1、2、3三種方法同時使用時的優(yōu)先級)。 即:1>2>3
session詳細解析(是否過期、失效時間)
Session一直是我們做web項目經(jīng)常使用的,以前沒太注意,這次又細致的看了下!
1.session其實就是一個Map,鍵=值對,通過session.getAttribute("name");獲得session中設置的參數(shù)
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過沒過期
1) 以前是根據(jù) if (session.getAttribute('user')==null) 判斷是否為空
2) 如下為看到的一個帖子,判斷session不為空的好方法:request.getSeesion(boolean)方法,一下子讓我恍然大悟。
這個方法里面?zhèn)髁艘粋€boolean值,值為true時,若request中的session不存在,那么就創(chuàng)建新的會話,如果存在就返回當前的會話;值為false時,若request中的session不存在就返回null。
這樣我們就可以很容易的聯(lián)想到這個所謂的request的當前會話是否存在和session過期的聯(lián)系,所以我們就可以“近似地”認為session不存在就是session過期了,那么我們就可以很容易地判斷session是否過期了。
方法如下:
? ? if(request.getSession(false)==null){ ? ? ? ?System.out.println("Session has been invalidated!"); ? ? }else{ ? ? ? System.out.println("Session is active!"); ? ? }
可能大家注意到我上面有一個“近似地”字眼,也就是說存在特別情況。
這個特殊情況就是第一次請求還沒有創(chuàng)建會話的時候,那么用這個方法返回的仍然是null。
也有很多人覺得應該使用javax.servlet.http.HttpSessionBindingListener接口來實現(xiàn)類似功能。
他們的意思是當session創(chuàng)建的時候session.setAttribute("isActive","yes"),只要session沒有過期,那么我們就可以 session.getAttribute("isActive")==null來判斷,但是如果session過期以后就不能用這個辦法了,因為此時我們使用session.getAttribute()方法就會拋出java.lang.IllegalStateException,這時候我們只能通過捕捉這個異常來進行判斷,這會打亂我們整個程序的邏輯流程。
當然我們也可以在session過期的時候這樣處理,在HttpSessionBindingListener接口的onValueUnbound()方法里面通過設置一個flag來標志session已過期,之后都使用這個flag,那么這個flag一定是要放在application里面,application是HttpServletContex類的對象,所以我們必須對這個flag加入是哪個session過期的信息,這樣一來整個的過程就十分麻煩。
關于用監(jiān)聽器實現(xiàn)我要補充一點,我的方法是站在某一個session的角度來實現(xiàn)的。如果說要監(jiān)測多個session就應該站在application的角度來分析,這時候的最佳選擇就是HttpSessionBindingListener或者HttpSessionListener。
寫這個文章的目的就是讓大家在需要判斷的時候(不管session是否過期都OK)用這樣的一條語句來簡單的實現(xiàn)功能,至于意義我們姑且不談。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot整合EasyExcel?3.x的完整示例
EasyExcel 是一個基于 Java 的、快速、簡潔、解決大文件內(nèi)存溢出的 Excel 處理工具,它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能,這篇文章主要介紹了SpringBoot整合EasyExcel3.x的過程,需要的朋友可以參考下2023-07-07基于Spring Boot的Environment源碼理解實現(xiàn)分散配置詳解
這篇文章主要給大家介紹了基于Spring Boot的Environment源碼理解實現(xiàn)分散配置的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-08-08Springboot Thymeleaf數(shù)字對象使用方法
這篇文章主要介紹了Springboot Thymeleaf數(shù)字對象使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2007-09-09