HttpSession

在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)。 
發佈了12 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章