【问题标题】: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。

    【讨论】: