Как отличить сеансы в браузере-вкладках? - PullRequest
129 голосов
/ 15 декабря 2008

В веб-приложении, реализованном на Java с использованием JSP и сервлетов; если я храню информацию в пользовательском сеансе, эта информация передается со всех вкладок одного и того же браузера. Как отличить сеансы в браузере-вкладках? В этом примере:

<%@page language="java"%>
<%
String user = request.getParameter("user");
user = (user == null ? (String)session.getAttribute("SESSIONS_USER") : user);
session.setAttribute("SESSIONS_USER",user);
%>
<html><head></head><body>
<%=user %>
<form method="post">
User:<input name="user" value="">
<input type="submit" value="send">
</form>
</body></html>

Скопируйте этот код на страницу jsp (testpage.jsp), разверните этот файл в существующем контексте веб-приложения на сервере (я использую Apache Tomcat), затем откройте браузер (FF, IE7 или Opera), используя правильный URL (localhost/context1/testpage.jsp), введите свое имя в поле ввода и отправьте форму. Затем откройте новую вкладку в том же браузере, и тогда вы сможете увидеть свое имя (получить из сеанса) на новой вкладке. Будьте осторожны с кешем браузера, иногда кажется, что этого не происходит, но он находится в кеше, обновите вторую вкладку.

Спасибо.

Ответы [ 21 ]

0 голосов
/ 18 июля 2013

Я читал этот пост, потому что думал, что хочу сделать то же самое. У меня похожая ситуация для приложения, над которым я работаю. И на самом деле это вопрос тестирования больше, чем практичность.

Прочитав эти ответы, особенно ответ, который дал Майкл Боргвардт, я понял, какой рабочий процесс должен существовать:

  1. Если пользователь переходит к экрану входа, проверьте существующий сеанс. Если он существует, обойдите экран входа в систему и отправьте его на экран приветствия.
  2. Если пользователь (в моем случае) переходит к экрану регистрации, проверьте существующий сеанс. Если он существует, сообщите пользователю, что вы собираетесь выйти из сеанса. Если они согласны, выйдите из системы и начните регистрацию.

Это решит проблему, когда пользователь увидит данные «другого пользователя» в своем сеансе. Они на самом деле не видят данные «другого пользователя» в своем сеансе, они действительно видят данные из единственного открытого сеанса. Очевидно, что это вызывает некоторые интересные данные, так как некоторые операции перезаписывают одни данные сеанса, а не другие, поэтому у вас есть комбинация данных в этом единственном сеансе.

Теперь обратимся к проблеме тестирования. Единственный жизнеспособный подход - использовать Директивы препроцессора , чтобы определить, следует ли использовать сеансы без файлов cookie. Видите, благодаря созданию конкретной конфигурации для конкретной среды, я могу сделать некоторые предположения о среде и для чего она используется. Это позволило бы мне технически подключить одновременно двух пользователей, и тестер мог протестировать несколько сценариев из одного сеанса браузера, даже не выходя из какого-либо из этих сеансов сервера.

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

Так что я думаю, что должен сказать, что в конечном итоге это плохая идея.

...