一尘不染

在Tomcat中的上下文之间共享会话数据

jsp

我一直在寻找在多个war文件之间共享会话数据的解决方案。我遇到了以下解决方案http://www.fwd.at/tomcat/sharing-
session-data-howto.html

它的基本思想是,如果您有多个war文件,则可以使用所使用的第一个上下文的sessionid来设置cookie。

可以使用将应用于所有上下文/应用程序的路径来设置Cookie。

例如,如果我对3个应用程序具有以下配置

/myapp/app1
/myapp/app2
/myapp/app3

我可以如下设置cookie

/ myapp会话ID。

然后,会话ID cookie将被发送到地址中带有/ myapp的任何请求。这样,会话ID便可以被任何上下文使用。

这种方法的唯一问题是它写于2003年并在Tomcat 4上进行了测试。

您对这种方法有何看法?有更好的方法吗?

谢谢


阅读 276

收藏
2020-06-08

共1个答案

一尘不染

那篇文章确实过时了。

在Tomcat 5.5和6.0上,您只需在中的元素中将emptySessionPathattribute
设置为即可。true``<Connector>``/conf/server.xml

<Connector ... emptySessionPath="true">

在Tomcat 7.0上,此更改已更改,因为现在可以从Servlet 3.0 API上对其进行配置。然后,可以通过在任何负责任文件中将in
元素设置sessionCookiePath为Tomcat来对其进行配置。/``<Context>``context.xml

<Context ... sessionCookiePath="/">

如前所述,有一个新的Servlet 3.0 API,它允许您通过标准API配置会话cookie。您可以声明性地添加以下内容web.xml

<session-config>
    <cookie-config>
        <path>/</path>
    </cookie-config>
</session-config>

或以编程方式SessionCookieConfig可用ServletContext#getSessionCookieConfig()

getServletContext().getSessionCookieConfig().setPath("/");

您可以在ServletContextListener#contextInitialized()或中执行此操作HttpServlet#init()

也可以看看:

2020-06-08