Session 在两个web应用程序之间同步会话 用例:

Session 在两个web应用程序之间同步会话 用例:,session,tomcat,timeout,Session,Tomcat,Timeout,我有两个在tomcat上运行的web应用程序,它们部署在两台不同的机器上。我的一个申请是父母,另一个是孩子。我登录到我的父应用程序,点击父应用程序的一个页面上的链接,我向我的子应用程序发送一个浏览器请求,该子应用程序在单独的浏览器窗口中打开它的一个页面。在这个场景中,我希望我的两个应用程序共享相同的超时值,并且应该像一个完整的应用程序一样运行 要处理的场景: 如果我从我的父应用程序注销,我的子应用程序也应该注销 若我关闭父窗口,父窗口应该和子窗口一起注销 若我关闭子窗口,子窗口应该注销,父窗口应

我有两个在tomcat上运行的web应用程序,它们部署在两台不同的机器上。我的一个申请是父母,另一个是孩子。我登录到我的父应用程序,点击父应用程序的一个页面上的链接,我向我的子应用程序发送一个浏览器请求,该子应用程序在单独的浏览器窗口中打开它的一个页面。在这个场景中,我希望我的两个应用程序共享相同的超时值,并且应该像一个完整的应用程序一样运行

要处理的场景:
  • 如果我从我的父应用程序注销,我的子应用程序也应该注销
  • 若我关闭父窗口,父窗口应该和子窗口一起注销
  • 若我关闭子窗口,子窗口应该注销,父窗口应该保持登录状态
  • 如果两个窗口都关闭,则父窗口和子窗口都应注销
  • 解决方案:
  • 将父会话超时设置为某个值。例如30分钟
  • 在父级上创建REST服务..假设为“parentisAlive()”
  • 在child上创建REST服务。让我们说“childisAlive()”
  • 在父级和子级上创建会话侦听器
  • 每个会话侦听器将调用其各自的REST服务
  • REST服务将根据自己应用程序的sessionID相互通信
  • 父级将预先列出(内存/DB)子级的sessionID,反之亦然
  • 当每个应用程序会话侦听器的超时值达到某个特定值时,会激活相应的应用程序会话侦听器。例如20分钟
  • 会话侦听器将调用各自的REST服务,该服务将负责同步彼此的会话超时值

  • 有人能建议一下这是否是实现会话同步的一个好解决方案吗?有人认为这有什么缺陷吗?

    Tomcats valve可以满足您的大部分需求。但如果您关闭浏览器窗口,会话仍将保留,只要至少在窗口或选项卡上是打开的。

    使用Terracotta代替上述解决方案解决了我的问题吗?任何想法。我想到的另一个可能的解决方案是基于cookie的。由于我的两个应用程序都在同一个域上运行,我的父应用程序可以在启动子应用程序时删除具有可能会话属性的cookie,哪个应用程序(父/子)正忙将使用其会话属性更新cookie,哪个应用程序(父/子)空闲将读取cookie以获取会话空闲时间。有什么想法吗?