java servlet会话id在每次请求时都会更改

x33g5p2x  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(303)

我有一个web应用程序,其中前端是通过vue cli开发的,并在其上运行localhost:8081 and 后端是一个使用tomcat的独立项目,正在运行localhost:8080
后端有一个控制器servlet,控制器根据一个动作将工作委托给另一个servlet。当登录页向控制器提交登录信息时,控制器创建httpsession,调用loginservlet验证凭据,然后将响应发送给控制器,控制器将响应登录页。到目前为止,如果我们检查controllerservlet和loginservlet上的httpsession,它们会非常匹配。
现在已成功登录vue路由器,请在url上为我们推送管理组件:localhost:8081/admin,此时我们有两个get请求,都发送给controllerservlet,后者将工作委托给另一个servlet。如果我们检查控制器上的会话和第三个servlet,它们是匹配的。但是如果我们从这3个请求中检查httpsession,它们都会有所不同,servlet会为每个请求创建一个新的请求。如何使这个httpsession持久化?这个问题是因为vue在8081上运行而后端在8080上吗?

yshpjwxd

yshpjwxd1#

到目前为止,如果我们检查controllerservlet和loginservlet上的httpsession,它们会非常匹配。
当然,它们会匹配,因为这两个会话 ControllerServlet 以及 LoginServlet 已由同一服务器创建(在端口8080上运行)。
在端口8080上运行的服务器创建的会话与在端口8081上运行的服务器没有关系,因此期望它们匹配是错误的。在极少数的情况下,如果他们匹配,那可能只是巧合。
在端口8081上运行的服务器获取在端口8080上运行的服务器创建的会话的唯一方法是通过持久化和查询会话,即您必须将在端口8080上运行的服务器创建的会话持久化到数据存储(db、nfs等),从该存储中运行在端口8080的服务器,8081必须查询并获取它。

相关问题