Подтвердить что ты не робот

Зачем устанавливать JSP-страницу session = "false"?

Мне было интересно, когда вы захотите установить следующую директиву страницы в JSP:

<%@ page session="false" %>

Я знаю, что он предотвращает создание объекта сеанса, но когда вам это нужно? Является ли это лучшей практикой, когда JSP не нуждается в доступе к неявной сессии?

ПРИМЕЧАНИЕ. Причина, по которой я спрашиваю, заключается в том, что она была в этом учебнике по Spring MVC, и я полагаю, что источники springsource знают свои вещи - http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/

4b9b3361

Ответ 1

Одной из причин может быть производительность и память. Если у вас есть страница, которая не должна участвовать в сеансе (например, about.jsp или faq.jsp), то поведение по умолчанию вовлечения каждого JSP в сеанс будет налагать накладные расходы на создание нового объекта сеанса (если его еще нет) и увеличение использования памяти, поскольку все больше объектов находится в куче.

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

Ответ 2

Этот параметр также является мерой безопасности, так как он также позволяет избежать потенциальной атаки DoS. Подумайте о простой script, итеративно wgets JSP: за несколько секунд будет создано много сеансов.

Ответ 3

У меня действительно есть реальный сценарий в моем приложении для его использования. У нас есть Squid, действующий как обратный прокси-сервер перед нашим приложением. Сервер squid настроен для опроса всех экземпляров tomcat, на которых размещено наше приложение, чтобы проверить, что серверы запущены и запущены, если они не являются, Squid перестал использовать другой сервер в нашем кластере.

Фактический опрос нашего приложения из Squid настроен на опрос определенной страницы в приложении. Поскольку опрос Squid на самом деле не является браузером, он не может проводить сеанс, а это значит, что каждый опрос на странице сервера заставил бы tomcat создать сеанс, на который Squid не может ссылаться. Мы добавляем директиву <%@ page session="false" %>, чтобы сеанс не создавался в каждом опросе. Если мы не использовали эту директиву, у нас было бы тысячи сеансов, созданных в течение 4 часов без каких-либо причин.

Ответ 4

Еще один вариант использования, когда на самом деле требуется добавить эту директиву, используется при использовании фильтра Apache Shiro noSessionCreation в конфигурационном файле .ini, например. потому что ваша схема аутентификации не имеет статуса. Если вам это не хватает, вы столкнетесь с org.apache.shiro.subject.support.DisabledSessionException.