У меня есть веб-приложение на основе J2EE / JSF.
Он состоит из ввода формы, текстового отображения и визуализации, отображаемой с помощью Google Visualization API с источником данных из пользовательского сервлета.
Страница отображается как <iframe/>
на странице, которую я могу частично контролировать в лучшем случае.
На Chrome, Firefox, приложение работает хорошо. Они принимают сессионный cookie-файл, созданный JSF, и возвращают идентификатор сеанса на сервер при каждом запросе.
В IE нам пришлось немного поковыряться, но в целом все также работает.
Однако в Safari (5.1.2 / Windows XP) идентификатор сеанса отправляется как нестандартный URL-параметр (;jsessionid=...
). Как следствие, запрос к источнику данных сервлета не включает идентификатор сеанса, и для каждого запроса к источнику данных создается новый сеанс.
Это приводит к застреванию визуализации в начальном состоянии.
Я подозреваю, что причина в различных движках JavaScript браузеров, но это подозрение бесполезно.
Можно ли как-нибудь заставить Safari добавить идентификатор сеанса ко всем запросам? Еще лучше, могу ли я заставить его использовать cookie для всех запросов?
Обновление: Я пытался добавить идентификатор сеанса к вызову, выполненному объектом Google "Запрос", но не удалось.
Когда называется так
new google.visualization.Query('chartdata?randomBitToBypassCaching='+random+";jsessionid="+jsessionid);
запрашиваемый URL-адрес:
http://localhost:8083/myapp/chartdata?randomBitToBypassCaching=1327312516149;jsessionid=9fdb20a75d30f000c063317997b5&tqx=reqId%3A0
Обратите внимание, что Query добавляет tqx
-параметр к URL-адресу, который отображает мою попытку передать спорный идентификатор.
Обновление 2 : рекомендуемый способ передать jsessionid в URL-адрес - добавить его перед параметрами.