隨筆-199  評論-203  文章-11  trackbacks-0
          以前用session時只知道session是和服務器連接的一個會話,有幾個常用的接口。
          這兩天仔細看了下這方面的資料,在這里和大家一起分享,如果有寫的不正確的地方,請指正,謝謝。
          下面我們在一個servlet中寫測試程序,class名為SeesinInfoServlet,我們一般在程序中取得session是用
          request的getSession()來取得容器中的session,該方法當容器中已經存在了該session的時候,返回已經存
          在的session,否則創建一個新的session,然后返回創建的session。request還有另外一個getSession()的重
          載方法:HttpSession getSession(boolean create),一般不常用,大家可以查j2ee的api,每個session都對應
          唯一的sessionId,sessionId可以通過getId()方法獲得,session是維持客服端和服務器端狀態的一個東西,是
          通過sessionId來一一對應的,客服端的sessionId一般保存在cookie中,如果客服端的cookie沒有被禁掉的話
          。如果cookie被禁掉,我們可以通過URL重寫來實現把sessionId傳到服務器。請看下面程序。
          1. import java.io.IOException;   
          2. import java.io.PrintWriter;   
          3. import java.util.Date;   
          4.   
          5. import javax.servlet.ServletException;   
          6. import javax.servlet.http.HttpServlet;   
          7. import javax.servlet.http.HttpServletRequest;   
          8. import javax.servlet.http.HttpServletResponse;   
          9. import javax.servlet.http.HttpSession;   
          10.   
          11. public class SeesinInfoServlet extends HttpServlet {   
          12.   
          13.     @Override  
          14.     protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {   
          15.         PrintWriter pw = res.getWriter();   
          16.         HttpSession s = req.getSession();   
          17.         pw.write("New Session:" + s.isNew() + "<br>");   
          18.         pw.write("Session Id:" + s.getId() + "<br>");   
          19.         pw.write("Session Create Time:" + new Date(s.getCreationTime()) + "<br>");   
          20.            
          21.         pw.write("<br>");   
          22.         pw.println("<h3>Request Information</h3>");   
          23.         pw.println("Session Id from Request:" + req.getRequestedSessionId()+ "<br>");   
          24.         pw.println("Session Id via Cookie:" + req.isRequestedSessionIdFromCookie()+ "<br>");   
          25.         pw.println("Session Id rewritten Url:" + req.isRequestedSessionIdFromURL()+ "<br>");   
          26.         pw.println("valid session id:" + req.isRequestedSessionIdValid()+ "<br>");   
          27.         //pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");   
          28.         pw.println("<a href='SessionInfoServlet'>refresh</a>");   
          29.         pw.close();   
          30.            
          31.     }   
          32.   
          33. }  

          PrintWriter pw = res.getWriter();這一句取得服務器端反映給客服端的輸出流。
          HttpSession s = req.getSession();取得session。
          req.getRequestedSessionId();這一句取得客服端cookie中的sessionId,如果cookie沒有被禁掉的話,第一次訪問為null,因為還沒創建session,以后每次都和
          s.getId() 取得的值一致。
          req.isRequestedSessionIdFromCookie();如果沒有禁掉cookie,返回true。
          req.isRequestedSessionIdFromURL();是否通過URL重寫取得sessionId,
          //pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");其中的res.encodeURL(String),即為URL重寫,我們可以看到地址欄后會跟sessionId。
          如果不是URL重寫,則地址欄中沒有sessionId。

          posted on 2009-06-16 22:53 Werther 閱讀(360) 評論(0)  編輯  收藏 所屬分類: 10.Java
          主站蜘蛛池模板: 肇庆市| 东宁县| 元朗区| 宁德市| 庆阳市| 怀远县| 德江县| 湖州市| 门头沟区| 临湘市| 浪卡子县| 锡林郭勒盟| 阳西县| 仁布县| 海晏县| 米脂县| 平凉市| 金堂县| 耒阳市| 广昌县| 金湖县| 赞皇县| 民丰县| 鹤山市| 永泰县| 北辰区| 石渠县| 勃利县| 甘谷县| 赣榆县| 阿勒泰市| 远安县| 溧水县| 剑阁县| 石楼县| 上杭县| 海南省| 措美县| 黔东| 涿鹿县| 三河市|