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

我一直在寻找在多个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上进行了测试。


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


谢谢


慕姐4208626
浏览 500回答 3
3回答

qq_笑_17

那篇文章确实过时了。在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>&nbsp; &nbsp; <cookie-config>&nbsp; &nbsp; &nbsp; &nbsp; <path>/</path>&nbsp; &nbsp; </cookie-config></session-config>或以编程方式SessionCookieConfig可用ServletContext#getSessionCookieConfig()。getServletContext().getSessionCookieConfig().setPath("/");您可以在ServletContextListener#contextInitialized()或中执行此操作HttpServlet#init()。

牧羊人nacy

据我所知,没有直接的方法可以执行此操作,但是,如果这些上下文共享同一域,则可以使用域级别的cookie。您可以将数据放在cookie中(我不建议这样做)。或放置一个安全的会话ID,您可以使用该ID来访问某种形式的存储(数据库或分布式缓存等)以检索所需的数据。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java