<div id="cnblogs_post_body" class="blogpost-body"><p>在通常系統登陸後,都會設置一個當前session失效的時間,以確保在用戶長時間不與服務器交互,自動退出登陸,銷燬session<br><span style="background-color: #ffffff;"><span style="color: #ff0000;">具體設置的方法有三種</span>:</span><br><span style="background-color: #00ffff;">1.在web容器中設置(以tomcat爲例)</span><br>在tomcat-7.0\conf\web.xml中設置,如下是tomcat7.0中默認配置:</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_606455" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java plain"><session-config></code></div><div class="line number2 index1 alt1"><code class="java plain"><session-timeout></code><code class="java value">30</code><code class="java plain"></session-timeout></code></div><div class="line number3 index2 alt2"><code class="java plain"></session-config></code></div></div></td></tr></tbody></table></div></div> </div> <p>tomcat默認session超時時間爲30分鐘,能夠根據須要修改,負數或0爲不限制session失效時間</p> <p>這裏要注意這個session設置的時間是根據服務器來計算的,而不是客戶端。因此若是在調試程序,應該是修改服務器端時間來測試,而不是客戶端</p> <p><span style="background-color: #00ffff;">2.在工程的web.xml中設置</span><br><!--時間單位爲分鐘--></p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_858241" class="syntaxhighlighter java"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="java plain"><session-config></code></div><div class="line number2 index1 alt1"><code class="java plain"><session-timeout></code><code class="java value">15</code><code class="java plain"></session-timeout></code></div><div class="line number3 index2 alt2"><code class="java plain"></session-config></code></div></div></td></tr></tbody></table></div></div> </div> <p> 這裏的15是指15分鐘失效</p> <p><span style="background-color: #00ffff;">3.經過java代碼設置</span><br>session.setMaxInactiveInterval(30*60);//以秒爲單位,即在沒有活動30分鐘後,session將失效</p> <p><span style="color: #ff0000;"><span style="background-color: #ffffff;">三種方式優先等級</span>:1 < 2 < 3</span></p> <p><span style="color: #ff0000;">在通常系統中,也可能須要在session失效後作一些操做</span>:<br>1.控制用戶數,當session失效後,系統的用戶數減小一個,控制用戶數量在必定範圍內,確保系統的性能<br>2.控制一個用戶屢次登陸,當session有效時,若是相同用戶登陸,就提示已經登陸了,當session失效後,就能夠不一樣提示,直接登陸<br>那麼如何在session失效後,進行一系列的操做呢?<br>這裏就須要用到監聽器了,即當session由於各類緣由失效後,監聽器就能夠監聽到,而後執行監聽器中定義好的程序就能夠了<br><span style="color: #ff0000;">監聽器類爲:HttpSessionListener類,有sessionCreated和sessionDestroyed兩個方法</span><br>本身能夠繼承這個類,而後分別實現<br>sessionCreated指在session建立時執行的方法<br>sessionDestroyed指在session失效時執行的方法<br>例子:</p> <div class="cnblogs_code"><div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div> <pre><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> OnlineUserListener <span style="color: #0000ff;">implements</span><span style="color: #000000;"> HttpSessionListener{ </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> sessionCreated(HttpSessionEvent event){ </span><span style="color: #008080;"> 3</span> HttpSession session=<span style="color: #000000;">event.getSession; </span><span style="color: #008080;"> 4</span> String id=session.getId()+<span style="color: #000000;">session.getCreationTime(); </span><span style="color: #008080;"> 5</span> SummerConstant.UserMap.put(id,Boolean.TRUE);<span style="color: #008000;">//</span><span style="color: #008000;">添加用戶</span> <span style="color: #008080;"> 6</span> <span style="color: #000000;"> } </span><span style="color: #008080;"> 7</span> <span style="color: #008080;"> 8</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> sessionDestroyed(HttpSessionEvent event){ </span><span style="color: #008080;"> 9</span> HttpSession session=<span style="color: #000000;">event.getSession; </span><span style="color: #008080;">10</span> String id=session.getId()+<span style="color: #000000;">session.getCreationTime(); </span><span style="color: #008080;">11</span> <span style="color: #0000ff;">synchronized</span>(<span style="color: #0000ff;">this</span><span style="color: #000000;">){ </span><span style="color: #008080;">12</span> SummerConstant.USERNum--;<span style="color: #008000;">//</span><span style="color: #008000;">用戶數減-</span> <span style="color: #008080;">13</span> SummerConstant.UserMap.remove(id);<span style="color: #008000;">//</span><span style="color: #008000;">從用戶組中移除掉,用戶組爲一個map</span> <span style="color: #008080;">14</span> <span style="color: #000000;"> } </span><span style="color: #008080;">15</span> <span style="color: #000000;"> } </span><span style="color: #008080;">16</span> }</pre> <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a href="javascript:void(0);" onclick="copyCnblogsCode(this)" title="複製代碼"><img src="//common.cnblogs.com/images/copycode.gif" alt="複製代碼"></a></span></div></div> <p>而後只須要把這個監聽器在web.xml中聲明就能夠了</p> <p><listener><br> <listener-class>com.demo.OnlineUserListener</listener-class><br></listener></p></div>javascript