2010-06-18 4 views
13

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

В web.xml мы имеем запись:

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

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

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

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

ответ

25

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

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

    3,1. если сервер не «знает», клиент:

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

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

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

Теперь на некоторые вопросы, которые вы имеете:

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

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

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

  • каротаж из фактически извлекая запись для идентификатора сессии на сервере.

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

0

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

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

2

Что он на самом деле указывает?

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

Is is scope of whole project?

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

Еще один момент смущает меня то, как можно выделим сеанса объем множественного запроса в одном проекте? Значит, если я вхожу в систему с ПК & в то же время Я вхожу в систему от другого ПК, он отличается от него?

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

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

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

И Gmail может предотвратить сеанс от Войти в Выход. Как он поддерживается с нашей личной страницей?

Persistent cookies

0

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

0

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

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

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

+0

Shiro не имеет ничего общего с управлением сеансами HTTP. Это имеет какое-либо отношение к аутентификации и авторизации, которые в случае веб-приложений «под обложками» действительно используют, среди прочего, HTTP-сессию. Но он определенно не ** берет на себя ответственность за «управление сессиями». Сервлетконтейнер является ответственным за это. Сиро просто использует его. – BalusC

0

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

1.Cookies 2.URL переписывания 3.Hidden полей формы 4.HTTP сессии

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