2016-09-19 131 views
8

我有两个HTTP服务器提供的UI。 因此我需要清除两个服务器的HTTP会话。 注销用例很简单,但我不清楚如何在会话超时用例中执行此操作。会话超时时来自浏览器的HTTP请求

服务器端的通知可以通过HttpSessionBindingListener Getting notification when bounded/unbounded to a HTTP session进行。 但是我怎样才能通知客户网站呢? 我必须从浏览器发送请求到第二个服务器,以便能够清除第二个服务器上的会话cookie,因此我无法从服务器端发送请求。

新增

一个服务器的Tomcat 8,第二服务器是Apache的HTTPD服务器。我想通过UI回调来解决它(从Tomcat HTTP Servlet服务器)。

+0

是不是更多的服务器配置?我认为有一种方法可以配置服务器以共享会话。你能在你使用的服务器上包含更多的细节,包括版本吗? – Kieveli

+0

好问题。我正在等待更多细节。我将这种方法与Spring Session进行了比较(集群:http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession-redis),它使用像redis这样的外部存储来管理集群会话。 PS:我希望在这个问题上有一个SO订阅按钮。 – code4kix

+0

Kieveli,我不想配置任何会话共享。一台服务器是Tomcat 8,第二台服务器是Apache HTTPD服务器。 我想通过UI回调来解决它(从Tomcat HTTP servlet服务器)。 code4kix,在这个问题上订阅,只需按下星号按钮 – Michael

回答

4

Apache的HTTPD(Apache)的文档:

与外部应用程序

https://httpd.apache.org/docs/2.4/mod/mod_session.html#integration

  • 您可以编写自己的模块,那么你可以使用这个模块来删除会话集成会话在Tomcat认为它们是可消耗的之后。
  • 您可以使用Tomcat和Apache外部的会话数据库(例如在MySQL中),两台服务器都会使用它验证用户。删除会话只需要从数据库中删除条目。
  • 作为一个独立的应用程序:作为文档状态,它是在你做的工作,查找和访问会话文件,打破它们,并编辑它们。如果Tomcat和Apache位于不同的计算机上,则可以在Apache框中拥有一个带有侦听器的代理,并让Tomcat请求代理删除会话数据。
  • Apache通常使用PHP,并且还有数据库。两者都可以有自己的会话来处理。
+0

我确实想通过数据库管理会话。在上面的答案中找不到解决方案 – Michael

+1

我不会编写代码,但是您可能会希望在apache httpd框(或apache的fork)上运行独立应用程序。让它监听端口(套接字或Java调用)。每当tomcat删除一个会话时,它都必须调用这个程序,程序必须删除匹配的apache httpd会话。没有简单的框架调用,你必须做的一切。 – gia

+0

我需要通过浏览器回调。我可以通过服务器端开发大量的解决方案,但我需要一个浏览器解决方案 – Michael

0

有几种方法可以尝试。

  1. 正如@Kwebble提到,在Tomcat会话超时拨打电话到您的Apache服务器,并要求其注销/无效会话。

  2. 如果会话超时在Tomcat中,UI会在发出任何请求时知道它。现在从UI中,拨打Apache服务器来注销/使会话无效。