Sky's blog

          我和我追逐的夢

          常用鏈接

          統計

          其他鏈接

          友情鏈接

          最新評論

          誰在創建session(1)-不恰當的request.getSession()

              在HttpServlet中,HttpSession對象通常在request.getSession(true)方法調用時才創建。HttpSession的使用是有代價的,需要占用服務器資源,本著能不浪費就不浪費的原則,我希望系統中的session都在掌握之中,在需要創建時由我們的代碼明確創建。但是最近在開發中發現,新的session對象經常在意料之外出現,究竟是誰在創建session呢?

              最常見的地方是錯誤的使用request.getSession()函數,通常在action中檢查是否有某個變量/標記存放在session中。這個場景中可能出現沒有session存在的情況,正常的判斷應該是這樣:

          private boolean ifFlagExistInSession(HttpServletRequest request) {
              HttpSession session = request.getSession(false);
              if (session != null) {
                  if (session.getAttribute("flagName")  != null) {
                      return true;
                  }
              }
              return false;
          }

              而下面的寫法,則可能會生成一個新的不在我們意圖之外的session:
          private boolean ifFlagExistInSession(HttpServletRequest request) {
              HttpSession session = request.getSession();   // a new session created if no session exists
              if (session.getAttribute("flagName")  != null) {
                  return true;
              }
              return false;
          }

              注意request.getSession() 等同于 request.getSession(true),除非我們確認session一定存在或者sesson不存在時明確有創建session的需要,否則請盡量使用request.getSession(false)。

          posted on 2007-12-19 11:41 sky ao 閱讀(2967) 評論(1)  編輯  收藏 所屬分類: web

          評論

          # re: 誰在創建session(1)-不恰當的request.getSession() 2007-12-19 15:33 隔葉黃鶯

          一般的(可能有些servlet實現不是這樣的),默認的訪問用戶第一次 jsp 頁面就會創建 session 的,因為 jsp 中指令 session 配置為 true,即
          <%@ page session="true"%>

          編譯出來的的 java 文件在 _jspService() 方法中有代碼行(Tomcat是這樣的)

          session = pageContext.getSession();

          除非你顯示設置
          <%@ page session="false"%>
          才會讓你自己 getSession(true)或 getSession()時創建session

          其實創建一個 session 并不耗什么資源,無非就是一個空的map,就是別往里面塞太多的東西,尤其是在集群環境下,會增加同步的負擔。  回復  更多評論   

          主站蜘蛛池模板: 寿阳县| 秀山| 托克逊县| 长白| 达日县| 桑植县| 涟水县| 涿州市| 金堂县| 梁平县| 房产| 金昌市| 柳州市| 清流县| 石城县| 都江堰市| 古浪县| 界首市| 岳西县| 黄梅县| 南平市| 津南区| 疏勒县| 织金县| 望江县| 沙田区| 福泉市| 稷山县| 徐闻县| 长岭县| 甘洛县| 永宁县| 泾源县| 康平县| 茂名市| 新源县| 门头沟区| 长垣县| 景宁| 肃北| 拜城县|