Session
比如:在網(wǎng)上書(shū)店應(yīng)用中,從一個(gè)客戶開(kāi)始購(gòu)物,到最后結(jié)賬,整個(gè)過(guò)程是一個(gè)Session.
Servlet API中定義了javax.servlet.http.HttpSession接口,Servlet容器必須實(shí)現(xiàn)這一接口。當(dāng)一個(gè)Session開(kāi)始時(shí),Servlet容器將創(chuàng)建一個(gè)HttpSession對(duì)象,在HttpSession對(duì)象中可以存放客戶狀態(tài)的信息。Servelt容器為HttpSession分配一個(gè)唯一標(biāo)識(shí)符,稱為Session ID.Servlet容器把Session ID作為Cookie保存在客戶的瀏覽器中。每次客戶發(fā)出HTTP請(qǐng)求時(shí),Servlet容器可以從HttpRequest對(duì)象中讀取Session ID,然后根據(jù)SessionID找到相應(yīng)的HttpSession對(duì)象,從而獲取客戶的狀態(tài)信息。
HttpSession接口中的方法:
getId():返回Session的ID;
invalidate():使當(dāng)前的Session失效,Servlet容器會(huì)釋放HttpSession對(duì)象占用的資源。
setAttribute(String name,Object value):將一對(duì)name/Value屬性保存在HttpSession對(duì)象中
getAttribut(String name):根據(jù)name參數(shù)返回保存在HttpSession對(duì)象的屬性值。
getAttributeNames():以數(shù)組的方式HttpSession對(duì)象中所有的屬性名。
isNew():判斷是否是新創(chuàng)建的Session,如果是新創(chuàng)建的Session,返回true,否則返回false
setMaxInactiveInterval():設(shè)定一個(gè)Session可以處于不活動(dòng)狀態(tài)的最大時(shí)間間隔,以秒為單位。如果超過(guò)這個(gè)時(shí)間。Session自動(dòng)失效,如果設(shè)置為負(fù)數(shù),表示不限制Session付出與不活動(dòng)狀態(tài)的時(shí)間。
getMaxInactiveInterval()讀取當(dāng)前Sessions可以處于不活動(dòng)狀態(tài)的最大時(shí)間間隔。
在Java Servlet API中提出了跟蹤Session的另一種機(jī)制,如果客戶瀏覽器不支持Cookie,Servlet容器可以重寫(xiě)客戶請(qǐng)求的URL,吧Session ID添加到URL信息中。
HttpServletResponse接口提供了重寫(xiě)URL的方法:
public java.lang.String encodeURL(java.lang.String url)
該方法的實(shí)現(xiàn)機(jī)制為:
先判斷當(dāng)前的Web組件是否啟用Session,如果沒(méi)有啟用Session,例如在JSP中聲明
<%@ page session="false"%>或者已經(jīng)執(zhí)行了session.invalidate()方法,那么直接返回參數(shù)URL
再判斷客戶瀏覽器是否支持Cookie,如果支持Cookie,就直接返回參數(shù)URL;如果不支持,就在參數(shù)URL中加入Session ID信息,然后返回修改后的URL.
posted on 2009-03-11 14:23 亂せ英豪 閱讀(777) 評(píng)論(0) 編輯 收藏