2013-03-22 37 views
2

我正在處理一些由離職顧問編寫的代碼。我想了解是否存在會議變量傳遞給方法之間的差異,以及由req.getSession()返回一個request.getSession()。getId()vs session.getId()

當我在調試器中檢查他們,他們似乎是相同的。是否有理由不直接從session.getId()變量,而不是req.getSesssion.getId()

public void enqueueRequest(
     HttpSession session, 
     HttpServletRequest req, 
     HttpServletResponse res) throws IOException { 

      req.getSession().removeAttribute(TIME_STAMP); 
      ResponseCache.INSTANCE.remove(req.getSession().getId()); 
     } 
} 

VS

session.getId(); 
session.removeAttribute(TIME_STAMP); 
+1

您是否嘗試在代碼中放入'=='來查看它們是否確實是同一個對象? – Jess 2013-03-22 17:29:25

+0

你可以檢查調用代碼,它是如何獲取會話對象的?可能僅從請求中檢索它。 – 2013-03-22 17:31:51

+1

getId()返回一個字符串,並打印出該ID以顯示它們具有相同的ID:INFO:req31d8991cb365c181440bc664e60a INFO:ses31d8991cb365c181440bc664e60a – EdgeCase 2013-03-22 17:32:20

回答

3

HttpServletRequest#getSession返回與http request相關的當前會話對象。如果您的Session對象和Session與http請求相關的對象相同,則id將與Object相同。

Documentation

返回與此請求相關的當前會話,或者如果 請求沒有會話,創建一個。

2

這是不好的設計。您無法訪問任何其他人的會話,並且會話已通過請求提供,因此會話參數是多餘的。如果有機會,請刪除它。

相關問題