Проблема с сессией - PullRequest
       15

Проблема с сессией

0 голосов
/ 18 сентября 2010

Я сталкиваюсь с проблемой, когда мы используем несколько вкладок, поскольку они используют один и тот же сеанс.Есть ли альтернативы этому?Можем ли мы создать уникальный сеанс, когда кто-то использует вкладку или CTRL + N.

Если это имеет значение, то это корпоративное приложение Java EE / Struts2.

Ответы [ 3 ]

1 голос
/ 18 сентября 2010

Это проблема, с которой сталкиваются все серверные веб-приложения, она не характерна для Java EE.Проблема заключается в том, что большинство браузеров хранят файлы cookie для каждого пользователя, а не для каждой вкладки.Кроме того, это поведение обычно не прозрачно для пользователя, что добавляет путаницы.Несколько решений, которые я могу придумать (хотя ни одно из них не является действительно удовлетворительным):

  • Разместите приложение под более чем одним URI.Таким образом, любой браузер будет хранить куки-файлы независимо, и, следовательно, у вас будет один сеанс для каждой версии приложения.
  • Распространение идентификаторов сеанса с помощью другого механизма, например, через URI.Это, однако, имеет несколько предостережений - он предоставляет пользователю идентификатор сеанса, создает уродливые URI и создает угрозу безопасности (перехват сеанса и т. Д.), Когда пользователи копируют, вставляют или добавляют в закладки текущий URI (потому что они затемсохранить идентификатор сеанса в ссылке).
  • Распространение идентификаторов сеанса через скрытые поля внутри страницы.Это решение, вероятно, требует от вас переписать часть встроенной обработки сеанса, и оно теряет идентификатор сеанса, когда ваша страница содержит ссылки на другие страницы в вашем приложении.
  • Для Firefox есть дополнение, называемое "cookie pie ", который позволяет пользователям иметь независимые хранилища cookie для некоторых или всех вкладок.Недостатком является то, что пользователи должны активировать его, а решение проблемы с вкладками становится ответственностью пользователя.Кроме того, он не работает ни при каких обстоятельствах (например, google находит ваш активный логин независимо от него).
  • Избегайте использования состояния сеанса и других механизмов для сохранения состояния между запросами.Как и при передаче идентификаторов сеансов через скрытые поля, это нарушается при определенных обстоятельствах.
  • Делайте приложение полностью ориентированным на клиента, то есть программируйте весь интерфейс в javascript и обменивайтесь данными с сервером через вызовы ajax.Таким образом, вы вообще не будете зависеть от реализации cookie браузера.Скорее всего, вам придется переписать значительные объемы кода, если предположить, что ваше приложение в основном уже работает.
0 голосов
/ 18 сентября 2010

Обычно экземпляр браузера обрабатывается как отдельный пользователь / объект для целей отслеживания сеанса.Особенно, если вы используете куки для отслеживания сессий.Я не уверен, что мне нравится идея о том, чтобы на разных вкладках могли быть разные сессии.Это чувствует себя не интуитивно понятным для веб-приложений.Все ИМХО, конечно.

Тем не менее, если вы хотите изменить это, вам придется придумать собственную реализацию.Возможно, вы можете сгенерировать и прикрепить разные идентификаторы сеанса к URL для разных вкладок.Никогда не пробовал сам, поэтому не знаю, насколько это будет легко или сложно.

0 голосов
/ 18 сентября 2010

Нет простого способа добиться этого, о котором я знаю.

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

Существует несколько вариантов обходного пути, как «отключить»старое окно, если пользователь нажимает Ctrl + N, проходя через многошаговую форму, но вам нужно будет предоставить более подробную информацию для идей по этому вопросу.

...