Насколько отличаются два браузера? Различные вкладки / окна / экземпляры одного и того же браузера делают все будут совместно использовать один и тот же сеанс. Лучше тестировать, используя браузеры разных марок, например один Firefox и другой IE, Safari, Chrome или Opera.
Если вы на самом деле тестируете браузеры разных производителей и по-прежнему сталкиваетесь с той же проблемой, то код, скорее всего, не является поточно-ориентированным. То есть Вы объявили переменные как переменную static
в некотором классе или как переменную instance класса Servlet. Вы знаете, что static
переменные являются общими для всех потоков, как и переменные экземпляра класса Servlet.
Редактировать # 1: как ответ на собственное редактирование: код просто не безопасен для потоков. Несомненно, на каком-то уровне есть переменная экземпляра static
или сервлета (in), непосредственно содержащая информацию. Трудно указать точную строку кода на этом расстоянии. Просто запустите отладчик и отладьте код, или опубликуйте SSCCE здесь, или попросите местного эксперта проверить ваш код.
Редактирование # 2: безопасность потоков в jsp / servlets не имеет ничего общего с использованием синхронизированных / volatile / и т.д. Все дело в написании правильного кода. Переменная static
НЕ является потокобезопасной. Все, что объявлено в методе doXXX () сервлета, является потокобезопасным, а снаружи - НЕ. Такого рода вещи. Имейте в виду: один HTTP-запрос учитывает один поток. За время жизни приложения существует только один экземпляр сервлета.
Пример: * * тысяча двадцать-пять
public class MyBean {
private static String property1; // Certainly NOT threadsafe, there is only 1 of it during application's lifetime.
private String property2; // Threadsafety depends on class which is holding the Bean instance.
}
и
public class MyServlet extends HttpServlet {
private static Bean bean1 = new Bean(); // Certainly NOT threadsafe, there is only 1 of it during application's lifetime.
private Bean bean2 = new Bean(); // This also NOT, because there's only 1 servlet in application's lifetime which is shared among all requests.
protected void doSomething(request, response) {
Bean bean3 = new Bean(); // Declared threadlocal, thus certainly threadsafe.
request.setAttribute("bean", bean3); // 1 request = 1 thread, thus threadsafe.
request.getSession().setAttribute("bean", bean3); // Session is shared among requests/threads from same client, thus NOT threadsafe.
getServletContext().setAttribute("bean", bean3); // Context is shared among all sessions from different clients, thus certainly NOT threadsafe.
}
}
Область страницы в JSP определенно является поточно-ориентированной. Ваша проблема лежит на более высоких уровнях. Моя ставка на переменную static
где-то.