我一直在寻找在多个 war 文件之间共享 session 数据的解决方案。我遇到了以下解决方案 http://www.fwd.at/tomcat/sharing-session-data-howto.html
它的基本思想是,如果你有多个 war 文件,你可以使用第一个使用的上下文的 sessionid 设置一个 cookie。
可以使用适用于所有上下文/应用程序的路径设置 cookie。
例如,如果我对 3 个应用程序进行以下配置
/myapp/app1
/myapp/app2
/myapp/app3
我可以设置一个cookie如下
/myapp sessionid.
然后,sessionid cookie 将被发送到地址中带有/myapp 的任何请求。这允许 session ID 被任何上下文使用。
这种方法的唯一问题是它是 2003 年编写的,并在 Tomcat 4 上进行了测试。
您对这种方法有何看法?有更好的方法吗?
谢谢
最佳答案
那篇文章确实已经严重过时了。
在 Tomcat 5.5 和 6.0 上你可以设置 emptySessionPath
属性为 true
在<Connector>
/conf/server.xml
中的元素.
<Connector ... emptySessionPath="true">
在 Tomcat 7.0 上,这已经改变,因为现在可以从 Servlet 3.0 API 进行配置。然后在 Tomcat 端可通过设置 sessionCookiePath
进行配置。至 /
在 <Context>
任何负责的元素context.xml
文件。
<Context ... sessionCookiePath="/">
如前所述,有一个新的 Servlet 3.0 API,它允许您通过标准 API 配置 session cookie。您可以通过将以下内容添加到 web.xml
中以声明方式执行此操作:
<session-config>
<cookie-config>
<path>/</path>
</cookie-config>
</session-config>
或通过 SessionCookieConfig
编程 ServletContext#getSessionCookieConfig()
可用.
getServletContext().getSessionCookieConfig().setPath("/");
您可以在 ServletContextListener#contextInitialized()
中执行此操作或 HttpServlet#init()
.
另见:
关于java - 在 Tomcat 中的上下文之间共享 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352781/