2013-02-28 4 views
1

У меня очень простой вопрос с запросом и сеансом в Интернете. Когда я запрашивал одну и ту же страницу страницы в течение нескольких раз из того же браузера с различными вкладками или через новое окно, идентификатор сеанса и время создания сеанса были одинаковыми.Запрос и сеанс в сервлете

Это я сделал из интернет-исследователя. Но при использовании другого браузера, такого как google chrome, и доступа к той же странице, тогда существовал другой идентификатор сеанса и время создания сеанса. Насколько я понимаю, HTTP-запрос не имеет гражданства.

В моем случае это не похоже на апатрид в том же браузере, что и для разных запросов HTTP. Новый поток создается путем создания нового сервлета контейнером. Таким образом, я пришел к следующему выводу:

Если запрос отправлен из того же браузера с открытыми различными вкладками или через другое новое окно в это время, запрос всегда использует тот же поток для работы сервлета с тем же идентификатором сеанса. Если запрос отправляется из другого браузера, новый HTTP-запрос отправляется с новым идентификатором сеанса. Итак, мой вопрос тогда, когда он без гражданства? Если запрос отправляется одновременно из другого браузера? Если я объявляю scope="request"> и scope="session"> весной, то это также следует за тем же случаем? Если я ошибаюсь в своем понимании, пожалуйста, поправьте меня.

ответ

1

Когда ваше серверное приложение запускает новый сеанс, контейнер сервлета отправляет заголовок Set-Cookie с JSESSIONID обратно в браузер. Браузер сохраняет этот файл cookie и отправляет его обратно на сервер с каждым запросом независимо от того, на какой вкладке вы делаете запрос. В Obvoiusly другие браузеры не имеют доступа к этому файлу cookie, поэтому они получат еще один сервер.

Когда ваш сервер получает запрос с файлом cookie JSESSIONID, он может соотнести этот запрос с запросами с тем же идентификатором, который был сделан ранее. Контейнер serlvet способен связывать разные атрибуты с этим идентификатором и сохранять эти атрибуты между запросами. Объект сеанса http в основном представляет собой контейнер для этих атрибутов, к которому ваше серверное приложение имеет доступ для чтения/записи. В основном это то, как statefullness реализуется с http-сессиями поверх HTTP-протокола, не связанного с отсутствием.

Что касается потоков: каждый запрос может обрабатываться любой случайной нитью, поскольку данные сеанса не привязаны к определенному потоку. Контейнер сервлета поддерживает сопоставление идентификатора сеанса с объектом сеанса, содержащим разные атрибуты. Следовательно, любой случайный поток может получить доступ к объекту сеанса, принадлежащему текущему запросу, на основе его идентификатора сеанса.

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

1

Spring

scope="request" 

Создает новый экземпляр бина на запрос.

scope="session" 

Создает новый экземпляр бина в session.And поддерживает экземпляр бина на протяжении сеанса жизненного цикла

Refer this for better understanding

1

Независимо от браузеров, Http протокол является лицом без гражданства. Полнота состояния выполняется через файлы cookie и сеанс.

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

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

Примечание. Последние браузеры совместно используют сеанс и запрос, сделанный с вкладки, или новое окно будет использовать тот же сеанс. Ex последние версии IE IE7, IE8 и IE9 хорошо известны как Loosely-Coupled IE (LCIE). проверьте это для получения более подробной информации. LCIE

Смежные вопросы