为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕姐4208626 2019-12-02 11:00:55
我一直在寻找在多个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上进行了测试。您对这种方法有何看法?有更好的方法吗?谢谢
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

那篇文章确实过时了。


在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()。


查看完整回答
反对 回复 2019-12-02
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

据我所知,没有直接的方法可以执行此操作,但是,如果这些上下文共享同一域,则可以使用域级别的cookie。

您可以将数据放在cookie中(我不建议这样做)。

或放置一个安全的会话ID,您可以使用该ID来访问某种形式的存储(数据库或分布式缓存等)以检索所需的数据。


查看完整回答
反对 回复 2019-12-02
  • 3 回答
  • 0 关注
  • 499 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信