2012-02-27 31 views
8

如何對會話對象調用isNew(),檢查會議是一個新的或已在使用?isNew()是如何判斷會話是新的還是正在使用?

,我讀了isNew()返回true如果客戶端尚未與會話ID迴應。但是這是什麼意思 ?請解釋

+0

你的問題涉及什麼課? – 2012-02-27 11:29:29

+0

@安德魯Logvinov看到編輯 – 2012-02-27 11:31:16

+0

閱讀理解會話是如何工作的:http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading – BalusC 2012-02-27 11:37:17

回答

20

如果客戶端尚未響應會話ID,我讀取isNew()返回true。但是這是什麼意思 ?

考慮服務器當前正在處理的請求。關於會話處理有兩種情況。

  • 在新會話場景中,服務器正在爲用戶/客戶端創建新會話。 (客戶端可能在請求中沒有提供會話標識,或者它可能提供了服務器認爲無效的會話標識。)servlet的應用程序代碼決定了會話是必需的(例如,因爲它有一些它想要的信息在那裏存儲),並試圖用「創建如果不存在」標誌來獲取它。 servlet基礎結構意識到沒有當前會話,使用新的會話標識創建一個新會話,並將其保存在會話存儲中。在完成請求時,會話ID被返回給客戶端;例如作爲cookie,或作爲附有會話ID的URL。

  • 在現有會話的情況下,客戶端已經包括在所述請求的會話ID;例如作爲會話cookie,或作爲請求URL中的會話ID。 servlet基礎結構識別此ID,在其會話存儲中查找它(並在必要時),重新創建包含從會話存儲檢索到的會話狀態的對象HttpSession。當servlet的應用程序代碼嘗試訪問會話時,它會獲得此對象,而不是新對象。會話狀態可以在servlet處理請求時使用和更新。

在第一種情況下,呼叫會話對象isNew()將返回true因爲這是一個新的會話。

在第二種情況下,在會話對象上調用isNew()將返回false,因爲這不是新會話。

如何在會話對象上調用isNew(),檢查會話是新的還是已在使用?

servlet基礎結構知道發生了這兩種情況中的哪一種,因爲它進行了會話創建或會話查找。的isNew()最明顯的實現是包括在HttpSession對象private boolean場,並返回該字段的值作爲isNew()結果。該字段將由servlet基礎結構根據它如何獲得會話對象進行初始化。

+2

我沒有了解你答案的一個部分。你能否說清楚一點? – 2012-02-27 11:44:40

+3

我完全理解你答案的每一部分,謝謝你寫下來。 – user1884155 2016-06-29 21:18:32

相關問題