2016-09-19 1 views
8

Ich habe UI, die von zwei HTTP-Servern bedient wird. Daher muss ich die HTTP-Sitzung von beiden Servern reinigen. Es ist einfach für die Abmeldung Anwendungsfall, aber nicht klar für mich, wie es für den Anwendungsfall Zeitüberschreitung zu tun.HTTP-Anfrage von einem Browser nach einem Sitzungszeitlimit

Die Benachrichtigung auf der Serverseite ist über HttpSessionBindingListener Getting notification when bounded/unbounded to a HTTP session möglich. Aber wie kann ich die Kundenseite darüber informieren? Ich muss die Anfrage von einem Browser an den zweiten Server senden, um einen Sitzungscookie auf dem zweiten Server zu säubern und daher kann ich keine Anfrage von der Serverseite senden.

Added

Ein Server ist Tomcat 8, der zweite Server ist Apache-Server. Ich möchte es via UI-Callback lösen (vom Tomcat-HTTP-Servlet-Server).

+0

Ist das nicht mehr eine Serverkonfiguration? Ich dachte, es gäbe eine Möglichkeit, die Server so zu konfigurieren, dass sie Sitzungen teilen. Können Sie weitere Details zu dem von Ihnen verwendeten Server hinzufügen, einschließlich der Version? – Kieveli

+0

Gute Frage. Ich warte auf weitere Details. Ich habe diesen Ansatz mit Spring Session (gruppiert: http://docs.spring.io/spring-session/docs/current/reference/html5/#httpession-redis) verglichen, die einen externen Speicher wie redis verwendet, um Cluster-Sitzungen zu verwalten. PS: Ich wünschte, es gäbe einen SO-Button für solche Fragen. – code4kix

+0

Kieveli, ich möchte keine Session Sharing konfigurieren. Ein Server ist Tomcat 8, der zweite Server ist Apache HTTPD Server. Ich möchte es über UI-Callback lösen (vom Tomcat HTTP-Servlet-Server). code4kix, um die Frage zu abonnieren, drücken Sie einfach auf die Stern-Schaltfläche – Michael

Antwort

4

Von Apache (Apache) Dokumentation:

Integration von Sessions mit externen Anwendungen

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

  • Sie Ihr eigenes Modul schreiben kann, dann könnte man dieses Modul Sitzungen löschen verwenden nachdem Tomcat sie für entbehrlich hält.
  • Sie können eine Sitzungsdatenbank sowohl für Tomcat als auch für Apache verwenden (z. B. in MySQL), beide Server würden die Benutzer damit validieren. Das Löschen einer Sitzung würde nur das Löschen des Eintrags aus der Datenbank erfordern.
  • Als eigenständige Anwendung: Wie die Dokumentation sagt, liegt es an Ihnen, die Sitzungsdateien zu finden und darauf zuzugreifen, sie zu brechen und zu bearbeiten. Wenn sich Tomcat und Apache auf unterschiedlichen Rechnern befinden, könnten Sie einen Agenten mit einem Listener in der Apache-Box haben und Tomcat veranlassen, dass der Agent die Sitzungsdaten löscht.
  • Apache geht normalerweise mit PHP, und es gibt auch Datenbanken um. Beide könnten ihre eigenen Sitzungen haben, um damit umzugehen.
+0

Ich möchte Sitzungen über die Datenbank verwalten. Kann die Lösung in der Antwort oben nicht finden – Michael

+1

Ich werde den Code nicht schreiben, aber wieder werden Sie wahrscheinlich eine eigenständige App auf der Apache httpd-Box (oder Ihre Gabel von Apache) wollen. Lassen Sie es auf einem Port abhören (Sockets oder Java-Aufrufe). Wenn Tomcat eine Sitzung löscht, muss es dieses Programm aufrufen, das Programm muss die entsprechende Apache httpd Sitzung löschen. Keine einfachen Rahmenaufrufe, man muss alles machen. – gia

+0

Ich brauche einen Rückruf über den Browser. Ich kann Tonnen der Lösung über Serverseite entwickeln, aber ich benötige eine Browserlösung – Michael

0

Es gibt ein paar Ansätze, die Sie ausprobieren können.

  1. Wie @Kwebble erwähnt, auf Tomcat-Session-Timeout einen Aufruf an Ihren Apache-Server und bitten sie Sitzung abzumelden/ungültig machen.

  2. Wenn die Sitzung in Tomcat ausläuft, wird die Benutzeroberfläche darüber informiert, wenn sie eine Anfrage stellt. Rufen Sie jetzt von der Benutzeroberfläche aus den Apache-Server auf, um die Sitzung abzumelden/ungültig zu machen.

Verwandte Themen