java - 在 Tomcat 中的上下文之间共享 session 数据

标签 java jsp session tomcat servlets

我一直在寻找在多个 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/

相关文章:

Java Spring : JUnit Hamcrest: Expecting Collection

jsp - 如何使用 XSLT 或 JSP 检索网站的收藏夹图标?

php - 如何在记住我登录 Symfony2 后获取 session ID?

php - 在 Laravel PHP 中使用数据库 session 驱动程序 Session::put() 数据存储在哪里?

php - $_SESSION 仅在页面重新加载后读取

java - 如何通过传递对象类型来创建多个对象?

Java filereader bufferedreader打印出一定数量的行

java - 露天休息,文件上传: cannot set description and filename

java - 如何在 jsp 和 ajax 中为两个选择选项框动态获取和填充从 mysql 到 HTML 选择选项的值

javascript - 设置页面加载处理时间