* 在JavaWeb中使用HttpSession(以下簡(jiǎn)稱(chēng)session)對(duì)象來(lái)表示一個(gè)會(huì)話(huà)。 

* Session的創(chuàng)建(代表會(huì)話(huà)周期的開(kāi)始):第一次調(diào)用request.getSession()方法時(shí),會(huì)創(chuàng)建一個(gè)session對(duì)象。

 * Session的銷(xiāo)毀(代表會(huì)話(huà)周期的結(jié)束):在某個(gè)請(qǐng)求周期內(nèi)調(diào)用了Session.invalidate()方法,此請(qǐng)求周期結(jié)束后,session被銷(xiāo)毀;或者是session超時(shí)后自動(dòng)銷(xiāo)毀。

 * 對(duì)于JSP,如果指定了<%@ page session="false"%>,則在JSP中無(wú)法直接訪(fǎng)問(wèn)內(nèi)置的session變量,同時(shí)也不會(huì)主動(dòng)創(chuàng)建session,因?yàn)榇藭r(shí)JSP未自 動(dòng)執(zhí)行request.getSession()操作獲取session。

 * 在session對(duì)象剛創(chuàng)建的第一個(gè)請(qǐng)求周期內(nèi),調(diào)用session.isNew()方法將得到true。

1.有效期設(shè)置

 * 可以在web.xml文件中配置session默認(rèn)的超時(shí)時(shí)間(分鐘):      <session-config>          <session-timeout>10</session-timeout>      </session-config>      也可以調(diào)用session. setMaxInactiveInterval()方法設(shè)置session超時(shí)時(shí)間(分鐘)

2.監(jiān)控  

* 通過(guò)SessionListenr可以監(jiān)聽(tīng)session的創(chuàng)建和銷(xiāo)毀,步驟:     

1.寫(xiě)一個(gè)類(lèi)MySessionListener,實(shí)現(xiàn)javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法     

 2.在web.xml中配置SessionListener:     

<listener>         

<listener-class>MySessionListener類(lèi)全名</listener-class>     

</listener>   

* 當(dāng)session 被創(chuàng)建和銷(xiāo)毀時(shí),容器會(huì)分別調(diào)用SessionListener的sessionCreated()方法和sessionDestroyed()方法,這 兩個(gè)方法中傳入了一個(gè)參數(shù)對(duì)象HttpSessionEvent,可以通過(guò)此對(duì)象的getSession()方法獲取session對(duì)象。

 應(yīng)用示例:在線(xiàn)人數(shù)統(tǒng)計(jì)


 1 import java.util.HashSet;
 2 
 3 import javax.servlet.ServletContext;
 4 
 5 import javax.servlet.http.HttpSession;
 6 
 7 import javax.servlet.http.HttpSessionEvent;
 8 
 9 import javax.servlet.http.HttpSessionListener; 
10 
11 public class MySessionListener implements HttpSessionListener {       
12 
13  public void sessionCreated(HttpSessionEvent event) {             
14 
15  HttpSession session = event.getSession();             
16 
17 ServletContext application = session.getServletContext();                           
18 
19  // 在application范圍由一個(gè)HashSet集保存所有的session             
20 
21  HashSet sessions = (HashSet) application.getAttribute("sessions");             
22 
23 if (sessions == null) {                    
24 
25 sessions = new HashSet();                    
26 
27 application.setAttribute("sessions", sessions);             
28 
29 }                           
30 
31 // 新創(chuàng)建的session均添加到HashSet集中             
32 
33  sessions.add(session);             
34 
35 // 可以在別處從application范圍中取出sessions集合             
36 
37 // 然后使用sessions.size()獲取當(dāng)前活動(dòng)的session數(shù),即為“在線(xiàn)人數(shù)”      
38 
39 }       
40 
41 public void sessionDestroyed(HttpSessionEvent event) {             
42 
43 HttpSession session = event.getSession();             
44 
45  ServletContext application = session.getServletContext();             
46 
47  HashSet sessions = (HashSet) application.getAttribute("sessions");                           
48 
49  // 銷(xiāo)毀的session均從HashSet集中移除             
50 
51 sessions.remove(session);      
52 
53 }
54 
55 }
56