Каковы некоторые стратегии для управления количеством сеансов и устранения ненужных сеансов в Java? - PullRequest
0 голосов
/ 14 января 2010

Какие существуют стратегии для управления количеством сеансов и устранения ненужных сеансов?

Или

Как мне узнать, что сеансы больше не нужны?

Ответы [ 5 ]

1 голос
/ 14 января 2010

Контейнер сервлета, как правило, делает недействительным и удаляет сеансы, время которых истекло. Вам действительно не нужно беспокоиться об этом вообще. Однако вы можете настроить время ожидания сеанса в web.xml следующим образом:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

Значение указывается в минутах, а значение по умолчанию составляет 30 минут. Это означает, что если клиент долго не запрашивал страницу, связанную с сеансом, сеанс будет признан недействительным.

Если вы хотите ограничить количество одновременно открытых сессий, вам нужно реализовать HttpSessionListener и сделать увеличение / уменьшение на sessionCreated() и sessionDestroyed() соответственно. Если вы хотите отслеживать фактические ссылки HttpSession, а также по некоторым неопределенным причинам, убедитесь, что вы храните их в WeakHashMap, чтобы они автоматически удалялись при аннулировании / разыменовании в памяти сервера, иначе это приведет к загрязнению и переполнению памяти сервера.

Еще раз, вам не нужно беспокоиться о ведении сессий. Пусть веб-контейнер выполняет свою задачу, для чего он и предназначен.

1 голос
/ 14 января 2010

На большинстве серверов веб-приложений Java есть компонент, который заботится о сессиях за вас (но вы можете настроить и взаимодействовать с этим компонентом при необходимости). В Tomcat это компонент Manager .

1 голос
/ 14 января 2010

Почему вы хотите сделать это самостоятельно? Ваш веб-сервер или контейнер должны обрабатывать это автоматически без вашего участия.

0 голосов
/ 14 января 2010

Какие стратегии мне нужно использовать для управления количеством сеансов и устранения ненужных сеансов?

Нет, сервер приложений сделает это за вас. Точнее говоря, контейнер хранит HttpSession в памяти до тех пор, пока связанный пользователь не будет неактивным в течение определенного периода времени, после чего наступает тайм-аут сеанса. В это время сеанс может быть сборщиком мусора. Это означает, что объекты HttpSession остаются в памяти по крайней мере в течение периода времени, указанного в значении тайм-аута конфигурации по умолчанию, если вы не удалите их программно. Обычно это делается путем предоставления возможности выхода из системы, где вы вызываете метод HttpSession#invalidate() Но нет абсолютно никакой гарантии, что пользователь будет использовать его.

Как мне узнать, что сеансы больше не нужны?

Как вы узнали бы, что пользователь делает за своим экраном? Вот почему контейнер обрабатывает это для вас, и вы должны позволить ему делать свою работу. Просто следуйте рекомендациям, чтобы ваше приложение могло масштабироваться без проблем с памятью:

  • Сведите к минимуму использование HttpSession (не вкладывайте в это всю землю).
  • Удалить объекты из HttpSession, если они больше не используются.
  • Поместить долгоживущие данные в базу данных.
0 голосов
/ 14 января 2010

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

Если вам действительно это нужно, вы можете использовать событие onUnload javascript для захвата события, когда некоторые из ваших пользователей переходят на другой сайт. Некоторая общая информация о onUnload и в каких сценариях он не работает, можно найти в этом вопросе Альтернатива для JavaScript onUnload . Уродливые хаки для исключения ссылок на ваш собственный домен http://www.dynamicdrive.com/forums/archive/index.php/t-4947.html.

Опять же, если вам это действительно не нужно, продолжайте настройку обработки сеансов серверов приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...