在通常系統登陸後,都會設置一個當前session失效的時間,以確保在用戶長時間不與服務器交互,自動退出登陸,銷燬session
具體設置的方法有三種:
1.在web容器中設置(以tomcat爲例)
在tomcat-7.0\conf\web.xml中設置,如下是tomcat7.0中默認配置:java
<session-config> <session-timeout>30</session-timeout> </session-config>
tomcat默認session超時時間爲30分鐘,能夠根據須要修改,負數或0爲不限制session失效時間web
這裏要注意這個session設置的時間是根據服務器來計算的,而不是客戶端。因此若是在調試程序,應該是修改服務器端時間來測試,而不是客戶端tomcat
2.在工程的web.xml中設置
<!--時間單位爲分鐘-->服務器
<session-config> <session-timeout>15</session-timeout> </session-config>
這裏的15是指15分鐘失效session
3.經過java代碼設置
session.setMaxInactiveInterval(30*60);//以秒爲單位,即在沒有活動30分鐘後,session將失效性能
三種方式優先等級:1 < 2 < 3測試
在通常系統中,也可能須要在session失效後作一些操做:
1.控制用戶數,當session失效後,系統的用戶數減小一個,控制用戶數量在必定範圍內,確保系統的性能
2.控制一個用戶屢次登陸,當session有效時,若是相同用戶登陸,就提示已經登陸了,當session失效後,就能夠不一樣提示,直接登陸
那麼如何在session失效後,進行一系列的操做呢?
這裏就須要用到監聽器了,即當session由於各類緣由失效後,監聽器就能夠監聽到,而後執行監聽器中定義好的程序就能夠了
監聽器類爲:HttpSessionListener類,有sessionCreated和sessionDestroyed兩個方法
本身能夠繼承這個類,而後分別實現
sessionCreated指在session建立時執行的方法
sessionDestroyed指在session失效時執行的方法
例子:this
1 public class OnlineUserListener implements HttpSessionListener{ 2 public void sessionCreated(HttpSessionEvent event){ 3 HttpSession session=event.getSession; 4 String id=session.getId()+session.getCreationTime(); 5 SummerConstant.UserMap.put(id,Boolean.TRUE);//添加用戶 6 } 7 8 public void sessionDestroyed(HttpSessionEvent event){ 9 HttpSession session=event.getSession; 10 String id=session.getId()+session.getCreationTime(); 11 synchronized(this){ 12 SummerConstant.USERNum--;//用戶數減- 13 SummerConstant.UserMap.remove(id);//從用戶組中移除掉,用戶組爲一個map 14 } 15 } 16 }
而後只須要把這個監聽器在web.xml中聲明就能夠了spa
<listener>
<listener-class>com.demo.OnlineUserListener</listener-class>
</listener>調試