【问题标题】:Single page app, no cookies, tomcat session management单页应用,无 cookie,tomcat 会话管理
【发布时间】:2024-01-15 01:43:01
【问题描述】:
这是场景:
单页应用程序(基于 AJAX),在不允许 cookie 但仍需要会话的环境中,以及后端的 Tomcat(或 JBoss)。
让后端容器 (Tomcat) 管理会话的最佳和最简单的方法是什么?
我是否只需将 JSESSIONID=SESSION_ID_GOES_HERE 附加到我发出的每个 AJAX 请求中,这足以让 Tomcat 获取会话吗?
【问题讨论】:
标签:
session
tomcat
jboss
session-cookies
session-management
【解决方案1】:
是的,确切地说,如果您不能使用 cookie,您可以在调用服务器之间实现相同的应用 JSessionid。这称为 URL 重写。
您必须将 jsessionid 附加到返回给浏览器的链接中,这样,浏览器将使用相同的 jsessionid 将其后续调用发送到服务器。但要做到这一点,您应该使用 servlet 的响应参数的方法:encodeURl() 和 setRedirect() 以便它正确附加 de JSessionId(如果确实需要)。
例如,如果您的 servlet/jsp 中有以下链接:
out.println("<a href=\"/mycontext/newpage\">Next Page<a>");
你应该写它:
out.println("<a href=\"");
out.println(response.encodeURL ("/mycontext/newpage"));
out.println("\">Next Page</a>");
如果需要,它会自动附加 JSessionId(例如禁用 cookie)。
同样,如果你只需要发送一个重定向,你应该:
response.sendRedirect (response.encodeRedirectURL
("http://myhost/mycontext/newpage"));
有关更多信息,请查看HttpServletResponse 的 JDK API。