每个请求的Java Servlet会话ID都会更改

问题描述

我有一个Web应用程序,其前端是通过vue-cli开发的,并在localhost:8081上运行,后端是一个使用tomcat的独立项目,并且在localhost:8080上运行

后端有一个控制器servlet,该控制器servlet根据一个动作将工作委托给另一个servlet。 当登录页面将登录信息提交给控制器时,控制器创建HttpSession,调用LoginServlet验证凭据,然后将响应发送到控制器,控制器将响应登录页面。到目前为止,如果我们在ControllerServlet和LoginServlet上检查HttpSession,它们将完全匹配。

现在,登录已经成功通过vue-router将admin组件推送到url:localhost:8081 / admin上,这时我们有两个get请求,两个请求都发送给ControllerServlet,后者将把工作委托给另一个servlet。如果我们检查控制器和第三个Servlet上的会话,则它们匹配。但是,如果我们从这3个请求中检查HttpSession,则它们彼此不同,servlet会为每个请求创建一个新请求。如何使该HttpSession持久化?问题是由于vue运行在8081上,而后端运行在8080上吗?

解决方法

直到现在,如果我们在ControllerServlet上以及在上检查HttpSession, 它们完美匹配的LoginServlet。

当然,它们将匹配,因为ControllerServletLoginServlet的会话是由同一台服务器(在8080端口运行)创建的。

由运行在端口8080上的服务器创建的会话与运行在端口8081上的服务器没有关系,因此期望它们匹配是错误的。在极少数情况下,如果它们匹配,那可能只是一个巧合。

运行在端口8080上的服务器唯一的方法是通过保留和查询会话来获取运行在端口8080上的服务器创建的会话,即,您将必须保留运行在该端口上的服务器创建的会话。将8080端口连接到数据存储区(DB,NFS等),从该服务器在该端口运行的服务器8081必须查询并获取它。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...