Как избежать совместного использования сессии, обеспеченного IE8 программно в JAVA EE-приложении?

Microsoft, чтобы сделать Internet Explorer 8 "более стабильным" и “быстрее”, изменила базовую архитектуру браузера и представила функцию, вызванную "Слабо связанный IE" (LCIE), который работает над совместным использованием сессии через ВКЛАДКУ и новые экземпляры.

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

ВЕРОЯТНОЕ РЕШЕНИЕ НА НЕМ

  1. При создании нового окна вместо того, чтобы создать путем нажатия на значок или Ctrl+N, мы должны использовать Файл-> Новая Сессия; этого не произойдет.

  2. Можно делать изменение реестра на клиенте ПК - добавление следующего.

    [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]

“TabProcGrowth" = dword: 00000000

Отключит, "Слабо связывают IE8"; IE8 затем работает предыдущими версиями IE.

  1. Выполненное использование MSIE iexplore.exe -nomerge отключит, "Слабо связывают IE8"; IE8 затем работает предыдущими версиями IE.

Но как я сделаю это программно?


Вы видите, моей проблемой не является мое приложение. Это хорошо работает, если я вхожу в систему один пользователь, но когда я вхожу в систему многочисленные пользователи через различных пользователей от различных экземпляров браузера IE8, мои более поздние данные сессии переопределяют первого один, это вызвано тем, что оба браузеры IE используют тот же идентификатор сессии. Это происходит из-за совместного использования сессии IE8. Существует только одна сессия, сохраняемая для одного приложения однако, сколько пользователей я вхожу в систему. На самом деле я хочу поддержать на сессии на пользователя.

Как то, когда я вхожу в систему Gmail в одном браузере. Если я просто ввожу Gmail на другом браузере. Это входит в систему автоматически. Я не хочу это в своем приложении. Я должен получить вход в систему другим пользователем за один раз, я должен выполнить независимую операцию.

Мое приложение использует сервер приложений Struts, Spring, Hibernate & JBoss.

Теперь скажите мне, как я должен продолжить двигаться?

7
задан Arjan Tijms 18 May 2013 в 09:24
поделиться

4 ответа

Лучше всего использовать веб-фреймворк, который поддерживает несколько одновременных сессий (иногда называемых разговорами или потоками), или просто не использовать сессию так много и перейти на REST. Если вам нужно взломать его на клиенте, вы не сможете сделать это из вашего веб-приложения, но это может сделать пользовательская программа win или файл .reg. Это также означает, что пользователи с другими ОС и браузерами все равно столкнутся с той же проблемой.

0
ответ дан 7 December 2019 в 18:40
поделиться

Я думаю, что проблемы, которые вы описали выше, могут быть воспроизведены на всех браузерах и могут быть лучше решены на стороне сервера. Один из известных мне подходов заключается в создании идентификатора беседы и управлении жизненным циклом беседы с помощью statemachine.

Это позволяет вам (и вашим пользователям) иметь один сеанс, в котором можно вести несколько бесед одновременно, что часто случается на практике, по крайней мере, во внутренних корпоративных приложениях. Мир более хаотичен, чем позволяют модели бизнес-процессов.

2
ответ дан 7 December 2019 в 18:40
поделиться

Попытайтесь сохранить идентификатор сеанса на стороне клиента. Например, на уровне JSP. Затем отправьте его обратно на серверный компонент и попробуйте отследить. Скажем, если полученный сеанс в настоящее время выполняется на стороне сервера, затем подождите некоторое время с помощью синхронизации или аналогичного механизма ожидания. Я надеюсь, что такого рода проблемы с сессиями придется решать непросто.

0
ответ дан 7 December 2019 в 18:40
поделиться

Мне не понравились все другие предоставленные решения. Единственное, что я хочу, - это предоставить URL-адрес, по которому пользователь может щелкнуть, и он получит новый сеанс для входа в систему. Существует четкая функция sessionAuthentication, но не openLinkInNewSessionWindow

Для решения проблемы браузера IE8 вы можете предоставить ссылку на странице «множественный вход» и использовать уродливый WScript из браузера.Пример:

<html>
  <head>    
    <script>
      function openNewSessionIE8NoMerge() {
        // This opens a new session window for windows with IE8, unfortually there is a Active X security warning.
        var WshShell = new ActiveXObject("WScript.Shell");
        WshShell.Run("iexplore.exe -nomerge www.gmail.com?testNewSession");
      }
    </script>
  </head>

  <a href="#" onclick="javascript:openNewSessionIE8NoMerge();">Click here for a new session IE8 (multiple sessions on the same application)</a>
</html>

Тест: Сохраните пример в sampleNewSession.html, откройте файл в IE8, в новой вкладке войдите в Gmail, нажмите ссылку в sampleNewSession. Теперь есть новое окно, и он еще не вошел в систему.

Это поможет пользователю, он может просто щелкнуть ссылку. Единственная проблема - это сообщение безопасности activeX.

0
ответ дан 7 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: