1

我想知道如果ServletResponse.reset()是我需要阻止非登錄用戶訪問servlet的額外步驟,或者是否存在風險或缺點,ServletResponse.reset()是否阻止未經授權(登出)的用戶訪問servlet?

背景:

的方式my website作品,最初用戶只能看到特定頁面,他們創建一個帳戶後,用這些憑據登錄。我最初遇到的問題是,儘管我使用了session.invalidate(),但當用戶註銷時,他們可以重新發送請求(例如,通過後退按鈕),並且能夠訪問來自未授權狀態的受限制內容。假設會話過期,如上所述,我不確定這是甚至可能的,或者可以適當地做些什麼來防止它。

通過實驗,作爲一種解決方法,我試過ServletResponse.reset(),並且似乎來解決它,但我不明白爲什麼它的工作原理,因此,我不相信這是一個強大的可行的解決方案。

我的具體問題是:

  • 正在重置響應緩衝區(包括頭和HTTP狀態代碼)安全或推薦做法,還是有更好的方式來做到這一點?

  • 如何使用會話對象管理登錄,而不是使用會話cookie?

回答

0

我不認爲ServletResponse.reset()會傷害任何東西,但它不是標準的操作程序,它不應該是必要的。只要確保你正在做正確的事情,無論是否使會話失效和驗證。

無效會話:

  • 呼叫session.invalidate()刪除綁定到一個會話的會話屬性,但也可以確保您的代碼顯式刪除它自己的陳舊引用先前的會話狀態。

    • 進行身份驗證時,您可以檢查getSession(false)是否返回null,以確定:會話Cookie可以通過定位與精確匹配標準的cookie,最大年齡設置爲0

    驗證會話中顯式刪除有一個活動會話。如果是,則可以使其無效,然後您可以檢查request.isRequestedSessionIdValid(),或者明確檢查您在會話管理方案中使用的任何特定屬性。這將讓你正確地驗證會話的狀態。

從JavaDoc中:

ServletResponse的

        空隙復位()

                 清除緩衝區中存在的任何數據以及狀態碼和標頭。如果響應已經                承諾,這個方法拋出IllegalStateException。

        空隙無效()

               此失效會話然後解除綁定綁定到它的任何對象。

的ServletRequest

        布爾isRequestedSessionIdValid()

               檢查是否reques特德會議ID仍然有效。

        HttpSession中的getSession(布爾創建)

               返回與此請求相關聯的當前的HttpSession,或者,如果沒有當前會話和創建是真實
               返回一個新的會話。如果創建的是false並且該請求沒有有效的HttpSession,則此方法返回null。
               爲了確保會話正確維護,響應被提交之前,必須調用此方法。
               使用cookie維護會話的完整性,並要求創建一個新的會話時的反應是                承諾,則拋出IllegalStateException。