что использовать браузеры для идентификации сеанса сервера? Проблема с CORS ajax, теряющим JSESSIONID

Я обращаюсь к серверу tomcat, используя CORS из другого домена. У меня есть несколько приложений на сервере, а браузеры (chrome, firefox) получают и используют другой JSESSIONID для Set-cookie с сервера. Сервер использует предварительную проверку OPTIONS для проверки любой петиции CORS, прежде чем выполнять настоящий GET или POST. Все в порядке, каждое приложение имеет свой собственный JSESSIONID, а GET и POST работают нормально на сервере. Проблема в том, что я использую петицию POST с другим URL-адресом (другой сервлет) для загрузки файлов на сервер. Когда я делаю эту петицию, браузер никогда не выполняет предварительную проверку OPTIONS и не отправляет JSESSIONID на сервер, поэтому сервер создает новый сеанс и отправляет клиенту эту петицию. Я попытался изменить URL-адрес сервлета загрузки, чтобы он соответствовал стандартному URL-адресу, используемому во всех петициях, но с теми же результатами, JSESSIONID не используется. Я понимаю, что веб-приложение (java tomcat) может использовать несколько сервлетов/маршрутов/url-адресов, и браузер должен работать как уникальное приложение и всегда использовать один и тот же JSESSIONID, но это не так. Возможно, измените стандартный application/json на «Content-Type»: «multipart/form-data» — вот почему браузер не использует один и тот же сеанс, или, может быть, проблема в том, что задействован CORS. Кстати, я пытался обойти проблему, позаботившись об идентификаторе сеанса в моем коде, но JSESSIONID защищен браузером (HttpOnly), как настроено на tomcat, так что это невозможно. Некоторое руководство о том, что браузеры используют для идентификации и группировки петиций в рамках одного сеанса? Заранее спасибо.

ОБНОВЛЕНИЕ: Я нашел проблему. В ходатайстве клиента о загрузке файла я забыл использовать
withCredentials: true, для параметров ajax. Теперь JSESSIONID корректно отправляется на сервер.


person Rogelio Triviño    schedule 29.05.2017    source источник


Ответы (1)


Я нашел проблему. В ходатайстве клиента о загрузке файла я забыл использовать
withCredentials: true, для параметров ajax. Теперь JSESSIONID корректно отправляется на сервер.

person Rogelio Triviño    schedule 29.05.2017