2010-05-12 186 views

回答

20

有一個功能request.getSession(boolean create)

參數:
        create - 真正創造必要時申請一個新的會話;假返回NULL如果沒有當前會話

因此,你可以簡單地傳遞false告訴getSession如果會話不存在返回null。

+1

...最好的解釋imho ...指的是文檔,並保持專注。 – 2010-05-12 12:04:38

2

HttpSession session = request.getSession(true); 如果(session.isNew()){ ...做一些 }其他{ ...做別的事情 }

.getSession(true)本講述java如果不存在創建一個新的會話。

你可能當然也做:

if(request.getSession(false) != null){ 
    HttpSession session = request.getSession(); 
} 

看看:http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html

歡呼聲, 耶爾

+0

您必須將'false'傳遞給第二個'.getSession()'。 – aioobe 2010-05-12 11:28:28

+0

抱歉...錯字。糾正。謝謝。 – rakke 2010-05-12 11:31:24

29

如果你要檢查這個之前創建,那麼這樣做:

HttpSession session = request.getSession(false); 
if (session == null) { 
    // Not created yet. Now do so yourself. 
    session = request.getSession(); 
} else { 
    // Already created. 
} 

如果你不關心這個檢查後創建,那麼你也可以這樣做:

HttpSession session = request.getSession(); 
if (session.isNew()) { 
    // Freshly created. 
} else { 
    // Already created. 
} 

這節省了線路和booleanrequest.getSession()request.getSession(true)的做法相同。

0

定義一個類,例如SessionTimeoutIndicator,它實現了接口javax.servlet.http.HttpSessionBindingListener。接下來創建一個SessionTimeoutIndicator對象並將其添加到用戶會話中。當會話被刪除時,Servlet引擎將調用SessionTimeoutIndicator.valueUnbound()方法。然後您可以執行valueUnbound()來執行所需的操作。

3
if(null == session.getAttribute("name")){ 
    // User is not logged in. 
}else{ 
    // User IS logged in. 
} 
2

我想補充一點,如果你爲連接到你的網站的每個新用戶創建一個新的會話,那麼你的表現將會受到嚴重打擊。使用request.getSession(false)來檢查用戶是否有會話。如果您要根據用戶是否經過身份驗證來渲染視圖,則使用此方法不會創建新會話。