是HttpSession中的Java Servlet的僅的Java HttpSession中
HttpSession s = request.getSession();
後產生的?
在我的代碼中,我沒有寫這個,但是當我使用if (request.getSession(false) == null) ...
時,它不起作用。爲什麼?
是HttpSession中的Java Servlet的僅的Java HttpSession中
HttpSession s = request.getSession();
後產生的?
在我的代碼中,我沒有寫這個,但是當我使用if (request.getSession(false) == null) ...
時,它不起作用。爲什麼?
嘗試從瀏覽器中刪除會話cookie並進行另一個測試。如果它不起作用,那麼其他組件在該調用之前正在創建一個新的會話。
讀的JavaDoc,上面清清楚楚地寫着:
返回與此請求相關的當前會話,或者如果請求沒有會話,創建一個。
而另一個變種request.getSession(isCreate)
返回與此請求關聯的HttpSession的電流,或者如果沒有當前會話,並創建爲true,則返回一個新的會話。
如果create爲false且請求沒有有效的HttpSession,則此方法返回null。
要確保會話得到正確維護,您必須在提交響應之前調用此方法。如果容器使用cookie來維護會話完整性,並且在提交響應時被要求創建新會話,則會拋出IllegalStateException。
更新
對位的研究,我發現,會話是不創建除非request.getSession()
被稱爲地方。由於,The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
默認情況下,您的Servlet容器很有可能會爲您創建會話。
參考:
但是,更安全側,使用request.getSession()
來獲取會話,並使用request.getSession(false)
只有當你需要驗證一個會話是否已經創建。
除了Nishant的回答說明,會話可以由JSP頁面隱式創建,除非您將它們配置爲不創建與<%@ page session = "false" %>
的會話。
爲了使它完成:
request.getSession()
,在你的servlet,使用request.getSession(false)
獲得,而無需創建新的會話session
- 除非您指定<%@ page session="false" %>
session.isNew()
找出它是否已新創建
你是什麼意思'它不起作用?你有例外嗎?如果你的測試返回與null不同的東西,這意味着該會話已經存在,並且不需要創建一個新的。 – reef 2011-02-28 10:09:19
所以你得到request.getSession(false)!= null。 – PeterMmm 2011-02-28 10:11:05
我的意思是(request.getSession(false)== null)應該是真的,但它是假的,我不知道爲什麼 – Sergey 2011-02-28 10:11:13