會話的創建
HttpSession對象提供了一個isNew()方法,使用該方法時應當小心。確定用
戶是否以及擁有一個會話的最好的辦法時獲得當前會話。如果沒有會話存在,那
麼可以強迫用戶登錄。只有在成功登陸之後,才能創建一個新的會話對象。這個
順序是一個好的實踐,因爲它能防止用戶避開安全機制。
可以通過調用方法getSession(false)獲得會話對象。如果用戶沒有會話,那
麼該方法返回null。然後,可以強迫用戶在每次開始一個新會話之前進行登錄。
在這種情況下,當getSesion(false)返回null時,將客戶端瀏覽器重定向到web應
用程序的登錄頁面。如果用戶已經有一個會話,或者getSession(false)方法返回
的值不是null,那麼可以繼續使用該會話。
HttpSession session = request.getSesion(false);
if (session == null){
response.sendRedirect("login.jsp");
}
你可能會試圖執行一下操作:
HttpSession session = request.getSession(true);
if (sesion.isNew()){
response.sendRedirect("login.jsp");
}
不要這樣做。
在該代碼中,我們像往常一樣請求會話對象。然而,因爲我們在getSession()
方法中將參數值設爲了true,所以如果沒有會話存在,那麼服務器將創建一個新
會話。儘管該代碼這樣做似乎是正確的,但它實際上引入了一個安全性問題。一
些人可以通過重複請求url來創建大量會話對象。這些會話是作爲內存堆積在每條
請求的服務器上的,因此,攻擊者可以佔用大量的服務器資源。最終,攻擊者會
使服務器變得很不穩定。