Поиск кого-то, чтобы или подтвердить или опровергнуть мою теорию, что развертывание двух iframes, указывающих на две различных страницы с сохранением информации на том же домене, может привести к JSESSIONIDs тому, чтобы быть перезаписанным. Вот то, что я имею в виду:
Установка
- предположите, что у Вас есть две страницы, которые требуют, чтобы состояние HttpSession (привязка сессии) функционировало правильно - развернутый по http://www.foo.com/page1 и http://www.foo.com/page2
- предположите, что www.foo.com является единственным хостом, выполняющим Tomcat (6.0.20, fwiw), который использует JSESSIONID для идентификатора сессии.
- предположите, что эти страницы превращены в два iframe виджета, которые будут встроены в сторонние сайты: http://www.site.com/page1"/> (и/page2 соответственно)
- предположите там сторонний сайт, который хочет поместить оба виджета на той же странице по http://www.bar.com/foowidgets.html
Следующее состояние состязания может произойти?
- новый посетитель переходит к http://www.bar.com/foowidgets.html
- браузер начинает загружать URL в foowidgets.html включая два iframe 'src' URL
- потому что браузеры открывают несколько параллельных соединений против того же хоста (afaik до 6 в хромовом/и следующие случае), браузер, оказывается, одновременно выпускает запросы на http://www.foo.com/page1 и http://www.foo.com/page2
- Кот foo.com получает оба запроса приблизительно в то же время, называет getSession () впервые (на двух различных потоках) и лениво создает два HttpSessions и, таким образом, два JSESSIONIDs, с $Page1 значений и $Page2. Запросы также наполняют данные в соответствующие сессии (что данные потребуются, чтобы обрабатывать последующие запросы),
- предположите, что браузер сначала получает ответ на запрос page1. Браузер устанавливает cookie $Page1 JSESSIONID= для ХОСТА www.foo.com
- следующий ответ на запрос page2 получен, и браузер перезаписывает cookie JSESSIONID для ХОСТА www.foo.com с $Page2
- пользователь нажимает на что-то в 'page1' iframe на foowidgets.html; браузер выпускает 2-й запрос на http://www.foo.com/page1?action=doSomethingStateful. Тот запрос несет $Page2 JSESSIONID= (и не $Page1 - потому что значение cookie было перезаписано),
- когда foo.com получает этот запрос, он ищет неправильный экземпляр HttpSession (потому что ключ JSESSIONID является $Page2 и НЕ $Page1). Foobar!
Вышеупомянутое может произойти? Я думаю так, но ценил бы подтверждение.
Если вышеупомянутое явно возможно, каковы некоторые решения, учитывая, что мы хотели бы поддерживать несколько iframes на страницу? У нас нет твердой потребности в iframes для совместного использования того же HttpSession, хотя это было бы хорошо. Если решение все еще предусмотрит отдельный HttpSession на iframe, это - конечно - обязательно, что iframe 1 не заканчивает тем, что сослался на состояние httpSession для iframe 2 вместо собственного.
от вершины моей головы я могу думать:
- карта page1 и page2 к различным доменам (операция в секунду наверху)
- используйте перезапись URL, и никогда cookie (портит аналитику),
- что-нибудь еще?
большое спасибо, - nikita
задан Nikita 21 March 2010 в 21:07
поделиться