Java servlet 会话 ID 在每次请求时都会更改

Java servlet session id changes on every request

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

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

现在已经登录成功了 vue-router push 我们admin组件在url:localhost:8081/admin,此时我们有两个get请求,都是发给ControllerServlet的会将工作委托给另一个 servlet。如果我们检查控制器上的会话和第三个 servlet,它们是匹配的。但是,如果我们检查这 3 个请求的 HttpSession,它们彼此不同,servlet 会为每个请求创建一个新请求。我怎样才能使这个 HttpSession 持久化?是不是vue在8081上运行,后端在8080上的问题?

Until now if we check the HttpSession on the ControllerServlet and on the LoginServlet they match perfectly.

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

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

服务器 运行 在端口 8081 可以获取服务器 运行 在端口 8080 创建的会话的唯一方法是通过持久化和查询会话,即你将不得不将服务器 运行 在端口 8080 创建的会话持久化到 data-store (数据库、NFS 等),服务器 运行 在端口 8081 将不得不查询和明白了。