我正在开发一个应用程序网络,我想向我的用户提供多个应用程序,他们只需注册/登录一次,并通过同一登录名使用所有应用程序。
为了实现这一点,我创建了一个 cookie,在其中存储用户的会话 ID(他在登录时收到)。每次用户打开应用程序时,启动模块都会尝试查找 cookie 并向服务器发送请求以检查该会话是否仍然有效。
当我在本地开发计算机上对此进行测试时,一切正常,但在我的预上线测试服务器上,另一个应用程序找不到我在一个应用程序中创建的 cookie。
我的测试服务器是 Tomcat 7。
部署到 .war-upload 的应用程序
Cookie 最初是使用以下命令创建的:Cookies.setCookie("WebsiteName", result.getSessionId());
感谢每一个帮助!
Edit 1
我在让一切按照我想要的方式工作方面取得了进一步的进展。
本来我并没有实现HttpServlet Session,而是实现了一个自己的Session管理系统,在cookie中存储了我自己的session ID。检查服务器日志,我发现,如果两个应用程序都部署在子路径下,则应用程序 1 的会话输出如下:
Test HttpSession ID: 34446C7F3F345F74A0AAB5E292A47021 | Own Session ID: 3a25884692c499d5e72f07bb2b214a40f63f5a4a842852c58f30e1b46cf7bee7bc8a3394a9fe83a04ac4e1dcb4069dbca95a8f0001e012bc643934e08af35ec2
且对于应用 2
Test HttpSession ID: 429388DE8F0F76F877B077433FE16B66 | Own Session ID: 4e6b19a7621893de0cd0826b298ea4d8eb5ffecf4a7503f3274f729c2df28f4a1e9ce52179730b4139804f256591149fd712be76ad3afd87bade4f58aab4234f
我怀疑 Tomcat 会为每个 Web 应用程序生成另一个会话 ID,因此我将主应用程序的 .war-File 重命名为ROOT.war
并将其部署为 Root 应用程序。 ROOT 应用程序的输出如下:
Test HttpSession ID: B9F2D14A716C3A06E328F58ED0995D95 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c
AND 对于路径中的应用程序root/webapp1/
:
Test HttpSession ID: BFD836C297B1BF8204D243387401CCA7 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c
自己的Session ID存储在cookie中并由服务器检查。我的结论是,浏览器为我的域的每个子路径创建不同的 cookie。
向 Cookie 添加域名终于成功了,愚蠢的我:-)