Java 通过为多个域设置JSESSIONID cookie共享会话

Java 通过为多个域设置JSESSIONID cookie共享会话,java,session,tomcat,web-applications,servlets,Java,Session,Tomcat,Web Applications,Servlets,我的web应用程序部分可从www.domainA.com访问,另一部分可从www.domainB.com访问。当我通过domainA.com进入我的应用程序并导航到domainB.com时,旧会话将丢失,新会话将创建。但我不想在这两个域之间共享我的会话(当我登录domainA.com时,我不想再次登录domainB.com) 因此,我认为解决方案应该是为domainA.com和domainB.com域创建JSESSIONIDcookie,无论进入哪个站点 我想我会在会话创建时手动创建一套Http

我的web应用程序部分可从www.domainA.com访问,另一部分可从www.domainB.com访问。当我通过domainA.com进入我的应用程序并导航到domainB.com时,旧会话将丢失,新会话将创建。但我不想在这两个域之间共享我的会话(当我登录domainA.com时,我不想再次登录domainB.com)

因此,我认为解决方案应该是为domainA.com和domainB.com域创建
JSESSIONID
cookie,无论进入哪个站点

我想我会在会话创建时手动创建一套
HttpSessionListener
JSESSIONIDcookie。但是我不知道如何从这个HttpSessionListener设置cookie

另一种方法是使用
Filter
。但对我来说,即使我只需要在会话创建时设置cookie,也无法过滤每个请求

我使用的是Tomcat7,但对于所有java服务器的通用解决方案将不胜感激

我还认为最好的解决方案是以某种方式钩住或覆盖在正常情况下设置cookie的机制,并使其为这两个域设置cookie


可能存在更好、更干净的解决方案,这是我们没有想到的。

如果是子域,则只需在Tomcat XML配置文件中设置一个属性。那么它依赖于Tomcat吗?我无法通过我的应用程序访问它?
JSESSIONID
由容器管理,而不是由您的webapp管理,因此是的,它的配置取决于容器。但是,您可以使用web应用中的过滤器在其上创建另一层,正如您自己回答的那样。据我所知,新会话只能由用户访问我的web应用启动。这样我就可以只使用HttpSessionListener了。但我不知道如何访问来自此侦听器的触发请求。在HTTP请求期间,会话不一定创建和销毁(例如,在服务器端会话超时期间,根本没有HTTP请求),因此HTTP请求对象引用不可用。如前所述,使用过滤器。这并不需要在每个请求上额外花费1秒钟左右。最多1毫秒。