Как начать новый сеанс, если пользователь нажимает на новую вкладку в IE или mozilla на портале websphere?
У меня есть один портлет "пользовательский поиск" на домашней странице одного приложения, работающего на сервере портала Websphere, который отображает соответствующие пользовательские записи в соответствии с критериями поиска, заполненными в форме поиска. У меня есть требование иметь ссылку "назад к поиску" на странице результатов, которая при клике должна показывать заполненную форму на входе jsp.
Проблема, с которой я сталкиваюсь, заключается в том, что я открываю приложение на двух разных вкладках одного и того же браузера IE и начинаю давать некоторые критерии поиска, отправляю и одновременно ищу какой-то другой ввод с другой вкладки IE (в том же браузере) и затем нажимаю Вернитесь на предыдущую вкладку и нажмите ссылку "Вернуться к поиску", вместо того, чтобы показывать мне первый ввод, он покажет мне ввод, который я ввел на следующей вкладке IE.
Я устанавливаю и получаю bean-компонент (форму bean-компонента) через сеанс портлета. Но на двух вкладках diff одного и того же IE это будет один и тот же сеанс пользователя (и может быть один и тот же сеанс портлета.)
Как это исправить, чтобы две вкладки сохраняли результаты поиска независимо друг от друга?
Единственное, на что следует обратить внимание, это то, что я могу получить доступ к приложению "пользовательский поиск" без входа в систему. Поэтому в этом случае он должен использовать сеанс портлета по умолчанию. Что произойдет, когда я войду в систему, а затем выполню поиск; перезапишет ли сеанс портлета и сеанс http?
2 ответа
По сути, ваша проблема связана с тем, что ваш сеанс одинаков для обеих вкладок, поэтому любые данные, которые вы храните, не могут отличаться между вкладками, если вы не сохраните их как таковые. Я назначил бы каждому поисковому идентификатору и сохранял бы их в коллекции в вашем сеансе. Затем, когда вы рисуете кнопку "Назад к поиску", добавьте идентификатор поиска, чтобы вы могли вытащить правильный поиск при создании страницы ввода.
В качестве альтернативы вы можете сэкономить память сервера, разместив результаты поиска в виде строки запроса на ссылку возврата к поиску, а не сохраняя ее в сеансе.
То, что вы описываете, является довольно распространенной проблемой, с которой сталкивается веб-приложение - я думаю, что официальный термин - это разговоры, - что необходимо поддерживать что-то среднее между областью сеанса и областью запроса.
Некоторые веб-фреймворки поддерживают эту концепцию, некоторые нет. Спецификация портлета не поддерживает это "из коробки" (возможно, в веб-сфере есть что-то конкретное).
Я думаю, что один из способов воссоздать поддержку разговоров, это сохранить идентификатор разговора в сгенерированном HTML. Таким образом, вы можете иметь идентификатор для каждой вкладки / окна. Если вдруг запрос получает старый идентификатор, вы знаете, что он поступает либо со старой страницы (если пользователь использовал кнопку назад), либо с другой вкладки.
Это только грубый набросок. Я почти уверен, что в Интернете есть хорошие ресурсы по этой проблеме, иначе возникнет другой вопрос.