Httpsession применим для каждого пользователя или браузера? - PullRequest
2 голосов
/ 08 декабря 2011

Я использую tomcat в качестве своего веб-сервера. Я нажал на какой-то URL в IE и поместил какой-то объект в HttpSession для этого запроса.

Теперь мои вопросы:

  1. Если я закрою браузер и нажму на ссылку в новом браузере, будет ли доступен объект, который я ранее поместил в сеанс?

  2. Если я не закрою браузер и не нажму URL в новой вкладке / окне, будет ли доступен объект, который я ранее поместил в сеанс?

HttpSession Javadoc говорит следующее:

Предоставляет способ идентификации пользователя по нескольким запросам страниц или посещения веб-сайта и хранения информации об этом пользователе.

Согласно моему пониманию, здесь термин «пользователь» означает «браузер». Как только мы открываем новый браузер, Tomcat / любой веб-сервер рассматривает его как нового пользователя. Это правильно? Может ли Tomcat добиться этого с помощью файлов cookie или переписывания URL-адресов?

Javadoc также говорит:

Информация о сеансе распространяется только на текущее веб-приложение (ServletContext).

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

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

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

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

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

1 голос
/ 08 декабря 2011

Я думаю, это зависит от реализации сервера (сеансовый файл cookie или параметр в URL).

По умолчанию Tomcat использует cookie-файлы сеанса и использует параметр URL, если пользовательский агент отказывается от cookie-файлов.

Итак, поведение меняется, конечно.

  • С печеньем
    1. нет
    2. да
  • с URL
    1. нет;да, если скопирован полный URL с & JSESSIONID
    2. нет;да, если полный URL с & JSESSIONID скопирован
...