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

zig*_*ggy 24 java session jsp tomcat servlets

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

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

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

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

/myapp/app1
/myapp/app2
/myapp/app3
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式设置cookie

/ myapp sessionid.

然后,sessionid cookie将被发送到地址中带有/ myapp的任何请求.这允许会话id随后被任何上下文使用.

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

您对此方法有何看法?有没有更好的方法呢?

谢谢

Bal*_*usC 43

那篇文章确实已经过时了.

在Tomcat 5.5和6.0上,您只需在元素中设置emptySessionPath属性即可.true<Connector>/conf/server.xml

<Connector ... emptySessionPath="true">
Run Code Online (Sandbox Code Playgroud)

在Tomcat 7.0上,这已经发生了变化,因为现在可以从Servlet 3.0 API上进行配置.然后可以通过在任何负责任的文件中设置sessionCookiePath/in <Context>元素来配置Tomcat context.xml.

<Context ... sessionCookiePath="/">
Run Code Online (Sandbox Code Playgroud)

如上所述,有一个新的Servlet 3.0 API,允许您通过标准API配置会话cookie.您可以通过在以下内容中添加以下内容以声明方式执行此操作web.xml:

<session-config>
    <cookie-config>
        <path>/</path>
    </cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)

或以编程方式SessionCookieConfig提供ServletContext#getSessionCookieConfig().

getServletContext().getSessionCookieConfig().setPath("/");
Run Code Online (Sandbox Code Playgroud)

你可以用ServletContextListener#contextInitialized()或者做到这一点HttpServlet#init().

也可以看看: