我一直在寻找在多个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上进行了测试。
您对这种方法有何看法?有更好的方法吗?
谢谢
那篇文章确实过时了。
在Tomcat 5.5和6.0上,您只需在中的元素中将emptySessionPathattribute 设置为即可。true``<Connector>``/conf/server.xml
emptySessionPath
true``<Connector>``/conf/server.xml
<Connector ... emptySessionPath="true">
在Tomcat 7.0上,此更改已更改,因为现在可以从Servlet 3.0 API上对其进行配置。然后,可以通过在任何负责任文件中将in 元素设置sessionCookiePath为Tomcat来对其进行配置。/``<Context>``context.xml
sessionCookiePath
/``<Context>``context.xml
<Context ... sessionCookiePath="/">
如前所述,有一个新的Servlet 3.0 API,它允许您通过标准API配置会话cookie。您可以声明性地添加以下内容web.xml:
web.xml
<session-config> <cookie-config> <path>/</path> </cookie-config> </session-config>
或以编程方式SessionCookieConfig可用ServletContext#getSessionCookieConfig()。
SessionCookieConfig
ServletContext#getSessionCookieConfig()
getServletContext().getSessionCookieConfig().setPath("/");
您可以在ServletContextListener#contextInitialized()或中执行此操作HttpServlet#init()。
ServletContextListener#contextInitialized()
HttpServlet#init()