2012-02-03 57 views
4

如何檢查EL中的請求是否存在會話?我正在嘗試類似於:如何在JSP EL中檢查會話?

<c:if test="${pageContext.request.session != null}"> ... </c:if> 

但它看起來像它永遠不會爲空。

回答

11

這的確是從來沒有null。這次會議是總是出現在JSP EL,除非添加

<%@page session="false" %> 

到JSP的頂部。然後,您可以檢查該會話如下(EL 2.2只!):

<c:if test="${pageContext.request.getSession(false) != null}"> 
    <p>The session has been created before.</p> 
</c:if> 

我不知道有什麼具體的功能要求。如果您想檢查會話是新的還是已經創建的,請改用HttpSession#isNew()

<c:if test="${not pageContext.session['new']}"> 
    <p>You've already visited this site before.</p> 
</c:if> 
<c:if test="${pageContext.session['new']}"> 
    <p>You've just started the session with this request!</p> 
</c:if> 

(爲new支架符號是強制性的,因爲new是在Java語言中的保留文字)

如果你依靠特定會話屬性,如已登錄中在用戶被設定爲

session.setAttribute("user", user); 

,那麼你應該寧願被攔截上,而不是:

<c:if test="${not empty user}"> 
    <p>You're still logged in.</p> 
</c:if> 
<c:if test="${empty user}"> 
    <p>You're not logged in!</p> 
</c:if> 
+2

你太好了,回答我甚至沒有問過的問題。檢查用戶是我想要的。 – 2012-02-03 22:03:52

+0

不客氣。在現實世界代碼中沒有任何意義的問題通常具有完全不同的功能要求。然後,我經常猜測最常見的功能需求,看起來很像你真正需要實現的功能。如果您在將來的問題中只說明瞭這一點,則可以節省我(和其他人)的時間;) – BalusC 2012-02-03 22:10:57

+0

有時很容易陷入編碼風暴,忘記退後一步,意識到這種方法是完全錯誤的。再次感謝。 – 2012-02-03 22:49:42

1

似乎與作品:

<c:if test="${fn:length(sessionScope) > 0}"> 

我不知道是否有更好的辦法,因爲這需要我有會話屬性(我總是這樣做,但它不是真的乾淨)?

1

在J2EE中,用戶訪問站點時總會有一個會話對象。

什麼是會話? 會話幾乎聽起來像是當用戶向服務器發出頁面請求時,服務器創建一個臨時會話來標識該用戶。因此,當同一用戶轉到該網站上的另一個頁面時,服務器會識別該用戶。因此,會話是服務器和用戶之間的一個小而臨時的獨特連接,使其能夠跨多個頁面請求或訪問該網站來識別該用戶。

所以基本上如果你打一個頁面,你有一個會話,因爲你使用JSP,最終被轉換爲servlet。

http://www.stardeveloper.com/articles/display.html?article=2001062001&page=1