How do you check if a session exists for the request in EL? I'm trying something like:
<c:if test="${pageContext.request.session != null}"> ... </c:if>
but it seems like it's never null.
It's indeed never null
. The session is always present in JSP EL, unless you add
<%@page session="false" %>
to top of JSP. You could then check for the session as follows (EL 2.2 only!):
<c:if test="${pageContext.request.getSession(false) != null}">
<p>The session has been created before.</p>
</c:if>
I'm not sure what's the concrete functional requirement is. If you'd like to check if the session is new or has already been created, use HttpSession#isNew()
instead.
<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>
(the brace notations for new
are mandatory because new
is a reserved literal in Java language)
Of if you're relying on a specific session attribute, such as the logged-in user which is been set as
session.setAttribute("user", user);
then you should rather be intercepting on that instead:
<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>
Seems to works with:
<c:if test="${fn:length(sessionScope) > 0}">
I wonder if there's a better way, since this requires that I have session attributes (I always do, but it's not really clean)?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With