什么使用浏览器来识别服务器会话? CORS ajax丢失JSESSIONID

时间:2017-05-29 06:48:10

标签: cors preflight

我正在使用CORS从其他域访问tomcat服务器。我在服务器中有几个应用程序,浏览器(chrome,firefox)从服务器接收和使用不同的JSESSIONID在Set-cookie上。在执行真正的GET或POST之前,服务器使用OPTIONS预检来验证任何CORS请求。 一切都很好,每个应用程序都有自己的JSESSIONID,GET和POST在服务器上运行正常。 问题是,我使用POST请求和不同的url(另一个servlet)将文件上传到服务器。当我做这个请愿时,浏览器不会进行OPTIONS预检,也不会将JSESSIONID发送到服务器,因此服务器会创建新会话并发送给客户端以进行此请求。 我尝试更改上传servlet网址以匹配所有请求中使用的标准网址,但结果相同,不使用JSESSIONID。 我知道一个(java tomcat)Web应用程序可以使用多个servlet / routes / url,浏览器必须作为一个独特的应用程序工作,并始终使用相同的JSESSIONID,但事实并非如此。 也许更改标准应用程序/ json的内容类型':' multipart / form-data'这就是为什么浏览器不使用相同的会话,或者问题可能是涉及到CORS。 顺便说一句,我已经尝试在我的代码中解决了处理会话ID的问题,但是JSESSIONID受到tomcat上配置的浏览器(HttpOnly)的保护,所以这是不可能的。 有关浏览器在同一会话下用于识别和分组请求的指南? 提前谢谢。

更新:我发现了问题。在客户请愿上传文件我忘了使用
         withCredentials:true, 关于ajax选项。现在JSESSIONID正确地转到服务器。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。在客户请愿上传文件我忘了使用
         withCredentials:true, 关于ajax选项。现在JSESSIONID正确地转到服务器。