2013-04-23 4 views
3

Согласно моему пониманию, тот же сеанс разделяется между различными вкладками одного и того же окна браузера. И для разных окон браузера создается другой сеанс . Теперь некоторые вопросы по моему пониманию: -некоторые вопросы/тайна о сеансе браузера и сеансе Id?

1) Когда я ударил свое веб-приложение в двух разных окнах браузера, я вижу тот же самый идентификатор jsession на консоли firefox. Как такой же сеанс сеанса используется в двух разных окнах браузера. Поскольку по умолчанию сеанс поддерживается через файлы cookie с помощью jsessionId, который создается сервером . Другой способ сохранения сеанса через URLRewriting, где мы поддерживаем сеанс, передавая jsessionId в каждом запросе url. Я могу видеть, используя org.tuckey.web.filters.urlrewrite.UrlRewriteFilter в проекте, но этот классный документ, похоже, не требует особого обслуживания сеанса. я не получаю, как пришел тот же сеанс крепится с помощью двух различных окна браузера и Techinical подход сделать это

2) аналогично, когда я ударил два различных приложения в двух различных вкладках же окне браузера вероятно, Google и некоторые другие веб-сайт скажем, yahoo, я не вижу такой же jsessionId в консоли firefox для этих двух веб-сайтов. Является ли сайт специальным материалом для создания нового сеанса для каждой вкладки? На самом деле для некоторого веб-сайта (возможно, для google) я не вижу jsessionId по адресу все под окном firefox. Как это возможно. Я понимаю, что он генерируется автоматически веб-сервером и передается либо cookie, либо URLReWriting?

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

UPDATE: - Позвольте мне на мои вопросы с различными сценариями: -

1) Удалите два разных URL (например, google.com и stackoverflow.com) на двух разных вкладках в одном окне браузера.

Мое понимание: - Две сессии будет создано два печенья будут созданы две разные области/порт

2) Нажмите два же URL (скажем, stackoverflow.com) в двух различных вкладке то же окно браузера.

Мое понимание: - Onesession будет создана как же куки будут повторно

3) Нажмите два же URL (скажем) в stackoverflow.com два совершенно другом окне браузера (Firefox).

Мое понимание: - сколько сеансов будет создано в этом случае?

ответ

3

Ваше первое предположение неверно. Если вы используете управление сеансом с помощью куки-файлов (по умолчанию для контейнеров сервлетов Java), ваш сеанс отображается во всех окнах одного и того же экземпляра браузера.

Если вы настроили сервер сервлетов Java для использования перезаписи URL только для сеансов, вы можете иметь один сеанс на каждую вкладку.

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

Другие веб-фреймворки, такие как PHP, могут справиться с этим совершенно другим.

+0

@ vanje.Thanks. Не могли бы вы ответить на мою обновленную часть, чтобы она была более ясной. –

+0

1) Правильно. Две сессии. 2) Да, один сеанс для обеих вкладок. 3) Один сеанс для обеих вкладок в разных окнах браузера. Браузер использует тот же файл cookie. – vanje

1

Файл cookie jsession_id создается сервером, который отправляет его в браузер в ответ на запрос через HTTP-заголовок Set-Cookie. Файл cookie хранится на клиенте браузером. Отныне браузер повторно отправит этот файл cookie для каждого последующего запроса в том же домене (cookie может быть сдержан безопасным и путь https://en.wikipedia.org/wiki/HTTP_cookie#Terminology, но здесь это не имеет значения).

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

Поэтому, чтобы поддерживать сеанс в нескольких экземплярах одной и той же программы Java, вам необходимо сделать то же самое и сохранить файл cookie jsession_id (и повторно использовать его, если это необходимо) за пределами памяти каждого экземпляра (например, в файле) , Это может быть не тривиально, если безопасность важна.

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