Как я могу проверить, истекло ли время сеанса? - PullRequest
2 голосов
/ 25 мая 2011

Как проверить на странице ошибки, истекло ли время сеанса?

Я пытался

<c:choose>
    <c:when test="${empty pageContext.request.session}">
        //do smth
    </c:when>
    <c:otherwise>
        //do smth
    </c:otherwise>
</c:choose>

но это не работает.

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Нет действительно надежного способа обнаружить это.Вы могли бы поиграть с каким-либо токеном на основе сеанса в качестве параметра запроса во всех ссылках / формах и проверить его в фильтре, но это полностью поддельное и не очень оптимизированное для SEO.

Лучшее, что вы можете сделать, это добавить <meta http-equiv="refresh"> тег <head> основного шаблона, который перенаправляет страницу на страницу ошибки тайм-аута сеанса автоматически по истечении сеанса.Поскольку вы используете страницу с общей ошибкой, вы можете передать условие в качестве параметра запроса:

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=error.jsp?type=timeout" />

и проверить его в error.jsp следующим образом:

<c:choose>
    <c:when test="${param.type == 'timeout'}">
        <p>Your session has been timed out.</p>
    </c:when>
    <c:otherwise>
        <!-- Handle default case here. -->
    </c:otherwise>
</c:choose>

Oh, да, ${pageContext.session} законно действителен.${pageContext.request.session} - просто ненужный обход.Проверьте PageContext javadoc для всех доступных геттеров.

0 голосов
/ 25 мая 2011

request.getSession () всегда будет возвращать сессию, поэтому ваш подход не будет работать. Если ваше требование не заключается в создании сеанса, когда он не существует, используйте пользовательский тег.

Если вы хотите создать сеанс, когда он не существует, и вы хотите знать, присоединяется ли запрос к сеансу / создает новый сеанс. Используйте $ {pageContext.request.session.new}.

0 голосов
/ 25 мая 2011

Я не думаю, что это будет работать так, как вы хотите.попробуйте $ {pageContext.request.session.new}

Если вы не укажете в теге <% @ page session = "false"%>, я не думаю, что он создает новый сеанс, поэтому ваш первыйкод / ​​может / работать, но я бы подчеркнул, проверка в порядке, указанном выше.

.isNew () определен в HttpSession

...