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,就是別往里面塞太多的東西,尤其是在集群環境下,會增加同步的負擔。  回復  更多評論   

          主站蜘蛛池模板: 台江县| 阿拉尔市| 方正县| 浦北县| 石泉县| 连云港市| 武功县| 永嘉县| 柳江县| 谢通门县| 怀柔区| 连江县| 远安县| 桂东县| 黄冈市| 日照市| 都昌县| 永年县| 盐山县| 华坪县| 富蕴县| 婺源县| 达尔| 兴仁县| 静乐县| 大城县| 武冈市| 乾安县| 麻栗坡县| 陆良县| 武清区| 东兰县| 无极县| 福安市| 施甸县| 黄陵县| 隆德县| 阿合奇县| 兴安盟| 舒兰市| 瑞昌市|