會話跟蹤,其原理是什么。
我們都知道,為了在WEB服務(wù)器中識別發(fā)出請求的用戶,對于每一個訪問者WEB服
務(wù)器都會給其創(chuàng)建一個session。在會話的創(chuàng)建于使用中,比較容易犯錯誤的地
方主要是當(dāng)我們需要讀取出保存在session的數(shù)據(jù)時,沒有轉(zhuǎn)化為相應(yīng)的格式,
導(dǎo)致程序出錯。比如:
HttpSession session=request.getSession();
|\\\\\\\\\\
注意Session在為進(jìn)行HttpSession session=request.getSession();之前
out.println(request.getSession());
HttpSession hs=request.getSession();
out.println(hs);
兩者執(zhí)行的結(jié)果相同;
第一個是獲得Tomcat內(nèi)置的默認(rèn)Session (就是會話建立時自動生成的Session唯一標(biāo)記本次會話)
第二次 是把 唯一的標(biāo)識Session 通過request.getSession()獲取內(nèi)存地址 給hs 然后hs
會獲取Session 然后對其操作 其實(shí)本質(zhì)上是對本次會話的唯一Session進(jìn)行操作.
\\\\\\\\\\\\\\
String MyName="Hello Accp";
session.setAttribute("name",MyName);
String name=seeeion.getAttribute("name");//錯誤的
String name=(String)seeeion.getAttribute("name");//正確的
由于WEB服務(wù)器為用戶創(chuàng)建的Session會占用系統(tǒng)內(nèi)存,所以通常服務(wù)器都需要及
時的刪除Session信息以釋放資源,方法有:
①關(guān)閉瀏覽器,關(guān)閉Session。
②調(diào)用HttpSession的invalidate()方法,刪除HttpSession對象和數(shù)據(jù)。
③兩次訪問時間間隔大于Session定義的非活動時間。
在Servlet中的HttpRequestServlet對象創(chuàng)建HttpSession對象有兩種方法:
①HttpSession session=request.getSession(boolean value);
②HttpSession session=request.getSession();
第一中方法中,布爾值為true時,如果存在于當(dāng)前請求相關(guān)聯(lián)的會話,就返回該
會話,否則就返回一個新會話。反之,布爾值為false時,如果存在當(dāng)前請求相
關(guān)聯(lián)的會話,就返回該會話,否則就返回null。
第二種方法與第一種方法的第一種情況相同。通常我們都喜歡使用第二種方法。