Как я могу заставить Safari использовать идентификатор сессии, сохраненный в cookie? - PullRequest
0 голосов
/ 20 января 2012

У меня есть веб-приложение на основе 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-адрес - добавить его перед параметрами.

1 Ответ

0 голосов
/ 23 января 2012

В конце я передал идентификатор сеанса в качестве параметра URL-адреса и реализовал фильтр сервлетов, который перенаправил запрос с использованием стандартной записи ;jsessionid=...?...

К сожалению, просто добавление идентификатора сеанса в строку запроса - перед любым другим параметром - не сработало:

new google.visualization.Query('chartdata;jsessionid="+jsessionid?randomBitToBypassCaching='+random+");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...