В моем проекте есть требование, чтобы у каждого запроса был новый сеанс, но если мы нажимаем один и тот же URL-адрес на нескольких вкладках или дважды открываем один и тот же браузер и нажимаем URL-адрес, тогда он считается одним сеансом, и мы получаем противоречивый результат. Есть некоторые настройки в ie браузеры, которые решают мою проблему, но мне интересно, можем ли мы сделать это программно. Я использую struts 1.3.
новая сессия для каждого запроса
- Эм... в этом нет особого смысла. Если каждый запрос представляет собой новый сеанс, вы фактически вообще не используете сеансы. 29.01.2013
- Я не уверен, что вы имеете в виду то, что сказали; новый сеанс для каждого запроса был бы бесполезен. Возможно, вы имеете в виду новый сеанс для каждого окна, и в этом случае вам нужно будет реализовать какую-то область диалога. Существует множество способов сделать это, хотя я не уверен, насколько легко было бы внедрить их в Struts 1, поскольку все ссылки/формы внутри приложения должны быть осведомлены о новом механизме для различения разговоров. 29.01.2013
Ответы:
Я действительно думаю, что вам следует использовать другой подход для решения этой проблемы, больше на стороне клиента, чем на стороне сервера, или, возможно, смешивая оба. Внезапно я могу подумать о создании уникального идентификатора на javascript каждый раз, когда вы загружаете страницу (то есть открываете другую вкладку) и сохраняете этот идентификатор в качестве идентификатора вкладки, тогда вы можете использовать эти идентификаторы на своей стороне сервера, чтобы соответствовать информация для каждой страницы. Почему это должно быть так? Поскольку http-серверы ничего не знают о вкладках браузера, они «без учета состояния» получают запросы и отправляют ответы, а сеансы являются своего рода искусственными, они просто отслеживаются с помощью простого файла cookie, отправляемого из браузера и в браузер, который помогает серверу узнать, кто разговаривает с.