Что такое управление сессиями в Java? - PullRequest
14 голосов
/ 18 июня 2010

Я также сталкивался с этим вопросом в своем интервью. У меня много путаницы с Session Scope и его управлением в Java.

В web.xml у нас есть запись:

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

Что это означает на самом деле? Это объем всего проекта?

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

Также еще одна запутанная вещь - это разница в браузере. Почему разные Gmail открываются в разных браузерах? И Gmail может предотвратить сеанс от входа до выхода. Как это поддерживается с нашей личной сетью?

Ответы [ 6 ]

26 голосов
/ 18 июня 2010

Управление сессиями не ограничивается Java и сервлетами. Вот как примерно это происходит:

  1. Протокол HTTP не имеет состояния, поэтому сервер и браузер должны иметь возможность сохранять личность пользователя с помощью нескольких запросов
  2. Браузеры отправляют первый запрос на сервер
  3. Сервер проверяет, идентифицировал ли браузер куки-файл сессии (см. Ниже)

    3.1. если сервер не «знает» клиента:

    • сервер создает новый уникальный идентификатор и помещает его в карту (примерно) в качестве ключа, значением которого является вновь созданный сеанс. Он также отправляет ответ cookie, содержащий уникальный идентификатор.

    • браузер сохраняет cookie сеанса (с продолжительностью жизни = время жизни экземпляра браузера), содержащий уникальный идентификатор, и использует его для каждого последующего запроса, чтобы идентифицировать себя уникально.

    3,2. если сервер уже знает клиента - сервер получает сеанс, соответствующий переданному уникальному идентификатору, найденному в файле cookie сеанса

Теперь перейдем к некоторым имеющимся у вас вопросам:

  • время ожидания сеанса - это время жизни каждой записи карты сеанса без доступа. Другими словами, если клиент не отправляет запрос в течение 30 минут (из вашего примера), карта сеанса удалит эту запись, и даже если клиент идентифицирует себя с уникальным ключом в файле cookie сеанса, никаких данных не будет. на сервере.

  • разные gmail (и любой другой сайт) могут быть открыты в разных браузерах, потому что cookie-файлы сеанса для каждого браузера. То есть каждый браузер идентифицирует себя уникально, либо не отправляя уникальный идентификатор сеанса, либо отправляя тот, который сгенерирован для него сервером.

  • регистрация с разных компьютеров на самом деле одинакова - вы не разделяете идентификатор сессии

  • Выход из системы фактически удаляет запись для идентификатора сеанса на сервере.

Примечание: в качестве альтернативы можно сохранить уникальный идентификатор сеанса:

2 голосов
/ 18 июня 2010

Что это означает на самом деле?

Время жизни сеанса. Сеанс истекает, если нет транзакции между клиентом и сервером в течение 30 минут (для сегмента кода)

Является ли объем всего проекта?

Имеет область применения. Определено для каждого веб-приложения

Еще один момент, который меня смущает, это как мы разделяем сессионный объем несколько запросов в одном проекте? Означает, если я вхожу в систему с ПК и в то же время я вхожу из другой ПК, это дифференцирует это?

Да. Идентификаторы сеанса (JSESSIONID для Apache Tomcat) будут другими.

Кроме того, еще одна запутанная вещь Разница в браузере. Почему разные Gmail можно открыть в разные браузеры?

Каждый логин одного и того же пользователя из другого браузера - это совершенно другой сеанс. И куки, установленные в одном браузере, не будут влиять на другой. Поэтому разные экземпляры Gmail возможны в разных браузерах.

И Gmail может запретить сеанс Войти в систему. Как это поддерживается с нашей личной сетью?

Постоянные куки

0 голосов
/ 20 марта 2013

у нас есть 4 способа управления сеансом.

1.Cookies 2. Переписывание URL 3. Скрытые поля формы 4.HTTP-сессия

четвертый является мощным и в основном используется сейчас.а-дней.

0 голосов
/ 10 января 2013

Я рекомендую Apache Shiro для управления сеансом, аутентификации и авторизации.

Я забираю его обратно.

Как @BalusC, приведенный ниже,только сервлет-контейнер отвечает за управление http-сессией.Сиро просто использует это.Он подключится к HttpSession через фильтр, который вы явно определили.

0 голосов
/ 18 июня 2010

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

0 голосов
/ 18 июня 2010

Сервлеты в Java имеют объект HttpSession, который вы можете использовать для хранения информации о состоянии для пользователя. Сеанс управляется на клиенте с помощью cookie (JSESSIONID) или может быть выполнен с помощью перезаписи URL. Время ожидания сеанса описывает, как долго сервер будет ждать после последнего запроса, прежде чем удалять информацию о состоянии, сохраненную в сеансе HttpSession.

Область действия указана для каждого экземпляра браузера, поэтому в примере, в котором вы регистрируетесь с двух разных ПК, вы получите два объекта сеанса.

...