2010-07-17 325 views
3

在開發使用servlet規範的應用程序時,我總是認爲爲給定客戶端的每個新請求創建的JSESSIONID cookie都是理所當然的。但給了它一些想法後,是不是更合乎邏輯的創建一個cookie標頭的servlet容器該會話已被請求並在代碼中創建?對於禁用Cookie的客戶,是否最終會針對每個請求創建新的HttpSession每個請求都有一個新的HttpSession?

請讓我知道如果問題仍然不清楚,所以我可以編輯它。 TIA。

回答

1

默認情況下,Servlet容器不會創建新的Session,除非Servlet明確地創建它。只是因爲在標題中填充了JSEESIONID並不意味着服務器上必須有一個參與者。一個例外是在JSP中,默認情況下創建會話,如果不存在,除非<%@網頁會議=「假」%>

至於沒有打開Cookie:

一web容器可以使用若干 方法將會話與 用戶關聯,所有這些都涉及在客戶端和服務器之間傳遞 標識符。標識符可以是 ,作爲cookie維護在客戶端上, ,或者web組件可以在返回給客戶端的每個網址 中包含 標識符。

如果應用程序使用會話 對象,你必須確保會議 跟蹤由具有 應用程序重寫URL每當 客戶端關閉餅乾啓用。您通過在servlet返回的所有URL 上調用響應的 encodeURL(URL)方法來執行此操作 。僅當禁用cookies時,此方法 纔在URL中包含會話ID ; 否則,它將返回未更改的URL 。

+0

這引出了一個問題,如果容器無論如何不會創建新的會話,提前生成JSESSIONID的目的究竟是什麼? – sasuke 2010-07-17 20:44:51

+0

噢,好吧,我想我會就這個查詢問一個新問題。謝謝您的幫助。 – sasuke 2010-07-21 17:48:59

相關問題