Microsoft, чтобы сделать Internet Explorer 8 "более стабильным" и “быстрее”, изменила базовую архитектуру браузера и представила функцию, вызванную "Слабо связанный IE" (LCIE), который работает над совместным использованием сессии через ВКЛАДКУ и новые экземпляры.
Но сессия, совместно использующая, может быть фатальной, когда кто-то пытается сделать, две разных вещи за один раз с тем же приложением, например, как кто-то хотят заказать того вперед билет поездки и один билет туда и обратно за один раз, в то время он закажет 2 тех же билета, что он не намеревался.
ВЕРОЯТНОЕ РЕШЕНИЕ НА НЕМ
При создании нового окна вместо того, чтобы создать путем нажатия на значок или Ctrl+N, мы должны использовать Файл-> Новая Сессия; этого не произойдет.
Можно делать изменение реестра на клиенте ПК - добавление следующего.
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
“TabProcGrowth" = dword: 00000000
Отключит, "Слабо связывают IE8"; IE8 затем работает предыдущими версиями IE.
iexplore.exe -nomerge
отключит, "Слабо связывают IE8"; IE8 затем работает предыдущими версиями IE.Но как я сделаю это программно?
Вы видите, моей проблемой не является мое приложение. Это хорошо работает, если я вхожу в систему один пользователь, но когда я вхожу в систему многочисленные пользователи через различных пользователей от различных экземпляров браузера IE8, мои более поздние данные сессии переопределяют первого один, это вызвано тем, что оба браузеры IE используют тот же идентификатор сессии. Это происходит из-за совместного использования сессии IE8. Существует только одна сессия, сохраняемая для одного приложения однако, сколько пользователей я вхожу в систему. На самом деле я хочу поддержать на сессии на пользователя.
Как то, когда я вхожу в систему Gmail в одном браузере. Если я просто ввожу Gmail на другом браузере. Это входит в систему автоматически. Я не хочу это в своем приложении. Я должен получить вход в систему другим пользователем за один раз, я должен выполнить независимую операцию.
Мое приложение использует сервер приложений Struts, Spring, Hibernate & JBoss.
Теперь скажите мне, как я должен продолжить двигаться?
Лучше всего использовать веб-фреймворк, который поддерживает несколько одновременных сессий (иногда называемых разговорами или потоками), или просто не использовать сессию так много и перейти на REST. Если вам нужно взломать его на клиенте, вы не сможете сделать это из вашего веб-приложения, но это может сделать пользовательская программа win или файл .reg. Это также означает, что пользователи с другими ОС и браузерами все равно столкнутся с той же проблемой.
Я думаю, что проблемы, которые вы описали выше, могут быть воспроизведены на всех браузерах и могут быть лучше решены на стороне сервера. Один из известных мне подходов заключается в создании идентификатора беседы и управлении жизненным циклом беседы с помощью statemachine.
Это позволяет вам (и вашим пользователям) иметь один сеанс, в котором можно вести несколько бесед одновременно, что часто случается на практике, по крайней мере, во внутренних корпоративных приложениях. Мир более хаотичен, чем позволяют модели бизнес-процессов.
Попытайтесь сохранить идентификатор сеанса на стороне клиента. Например, на уровне JSP. Затем отправьте его обратно на серверный компонент и попробуйте отследить. Скажем, если полученный сеанс в настоящее время выполняется на стороне сервера, затем подождите некоторое время с помощью синхронизации или аналогичного механизма ожидания. Я надеюсь, что такого рода проблемы с сессиями придется решать непросто.
Мне не понравились все другие предоставленные решения. Единственное, что я хочу, - это предоставить 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.