2012-05-29 2 views
5

Я хотел бы знать, когда ожидать «нулевого» при звонке HttpServletRequest.getSession(false)HttpServletRequest.getSession (false): Когда он возвращает null?

Также: Есть ли хорошие учебники по HttpSession? Я хотел бы получить информацию, например: когда invalidate()? каковы последствия? мне нужно проверить, верен ли возвращаемый HttpSession? ... < == Ответьте, что в комментарии пожалуйста.

+0

Я сделал именно это для моего сайта, когда понял, что есть определенные поисковые системы, которые не соблюдали мой robots.txt. Короче говоря, вы вызываете getSession (boolean) с false как параметр. Это возвращает сеанс, если он есть, или null, если его нет. Затем вы вызываете .getAttributeNames() в сеансе, который на недействительном сеансе (тайм-аут, закрыт) выдает исключение IllegalStateException. – 0xCAFEBABE

ответ

4

Вы практически не должны ожидать нулевого значения. Как сказано в документации, если для запроса нет активного сеанса (обычно, вы должны проверить это в цепочке фильтров запроса), будет создан сеанс. Если вы получите нулевое значение из этого, я бы сказал, что в базовой ОС есть проблема: недостаточно памяти для создания сеанса.

+0

Вот пример, который заставил меня задать этот вопрос: http://stackoverflow.com/questions/3080203/how-could-randomly-my-session-is-null. Мне интересно, есть ли еще такие случаи. Другие согласны с тем, что проверка фильтра на сеанс - хорошая идея? – AndrewBourgeois

+0

Как сказал плакат, он попробовал getSession (правда), который, согласно моему опыту, и документация создаст сеанс, если он еще не существует. Если он не создан, я бы сказал, что это проблема с конечными ресурсами или какой-либо другой проблемой (как предлагалось один плакат, может быть, технология антифишинга), но я не знаком ни с одним из упомянутых серверов приложений (Кот). – 0xCAFEBABE

+0

нормально, поэтому при нормальных обстоятельствах (ваше приложение работает с достаточным количеством ресурсов, ...), вы не должны получать нуль. Достаточно хорошо (я оставлю это открытым на один день, чтобы другие могли прокомментировать, если это необходимо). – AndrewBourgeois