2013-04-26 3 views
8

Möchten Sie wissen, wie eine Anfrage von mehreren Servern verarbeitet wird, die dieselbe Benutzersitzung führen.Wie wird die Webanwendungsanforderung von mehreren Servern gehandhabt, indem dieselbe Benutzersitzung beibehalten wird?

Zum Beispiel: Wir melden uns beim IRCTC an und versuchen, ein Ticket zu buchen. Während der Zahlung listet IRCTC mehrere Bankoptionen mit Optionsfeldern für Online-Transaktionen auf. Angenommen, ich entscheide mich, eine Transaktion mit der CITI-Bank durchzuführen, wenn ich auf den Radioknopf der CITI-Bank klicke, werde ich zur Transaktionsseite der CITI Bank-Website weitergeleitet, d. H. Sie sehen, dass die URL von der IRCTC-Website zur CITI-Bank-URL wechselt. Das bedeutet, dass ich komplett aus dem IRCTC ausgeschieden bin und auf die CITI BANK Website gewechselt bin. Jetzt, wenn meine Zahlung abgeschlossen ist, bin ich zurück auf IRCTC Website von CITI Bank Website ohne die USER SESSION, dh wenn ich von CITI Bank URL zu IRCTC nach Abschluss der Transaktion zurückgeschaltet die Benutzersitzung in angemeldet angemeldet ist Zustand.

Ich würde gerne wissen, wie das funktioniert.

  1. Wie eine Anfrage von IRCTC zu Citi Bank Website
  2. gesendet Wie Citi Bank-Server erhält Informationen von IRCTC
  3. Wie die gleiche Anfrage kommt von CITI Bank IRCTC zurück dh wie Server geschaltet werden (aus CITI-Bank an IRCTC)
  4. Wie dieselbe Benutzersitzung zwischen zwei verschiedenen Servern während der Kommunikation aufrechterhalten wird, dh IRCTC zeigt den Benutzer als eingeloggten Benutzer an, wenn die Anfrage von CITI Bank an IRCTC zurückkehrt, nachdem der Zahlungsvorgang abgeschlossen ist. Wie wird dieselbe Benutzersitzung beim Wechseln zwischen zwei Servern beibehalten?

Ich benutze Struts Rahmen arbeiten. Bitte helfen Sie mir in dieser Hinsicht und implementieren Sie dasselbe mit einigen Beispielen.

Unter der Annahme, IRCTC mit Struts (Jsp/Servlets), die Verstrebung Komponente übernimmt die Verantwortung, die Details von IRCTC zu Citi Bank zu senden und zurück erhalten Details von CITI Bank zu IRCTC. Ist es möglich, Requestdispacter.sendRedirect() oder etwas anderes zu verwenden?

Danke,

  • Anand

Antwort

3

Es gibt etwas session replication genannt wird. Es wird in Clustern verwendet, damit alle Clusterknoten dieselben Sitzungsinformationen verwenden. Lesen Sie die verknüpfte Website oder andere Ressourcen zur Funktionsweise der Sitzungsreplikation, wenn Sie neugierig sind.

Die Systeme müssen jedoch kein gesamtes Sitzungsobjekt teilen. In deinem Fall sieht es so aus, als würdest du einen Server verlassen und später ohne spezielle Sitzung zurückkommen. Die Sitzung wurde einfach nie geschlossen. Als würden Sie sich bei Ihrer bevorzugten Web-Mail-Site anmelden, dann auf eine komplett andere Seite wechseln und zu Ihrer Web-Mail-Site zurückkehren. Die Sitzung ist immer noch da. Sie sind immer noch angemeldet.

Also wahrscheinlich IRCTC Website gibt einige Informationen an die CITI Bank Website, die für CITI benötigt, um die Anfrage zusammen mit einem Token (nur eine Zahl im einfachsten Fall) zu verarbeiten. Wenn die CITI-Bank fertig ist, ruft sie einen IRCTC-Server mit dem Ergebniscode und dem Token auf. Mit dem Token kann der IRCTC-Server den Ergebniscode mit Ihrer Sitzung verknüpfen. Dann leitet CITI Bank Ihren Browser einfach auf eine IRCTC-Seite um. Der Server hat eine aktualisierte Sitzung und kann Ihnen die nächste Seite Ihres Bestellprozesses präsentieren.

+0

Ich glaube nicht, dass Zahlungs-Gateways einzelne Benutzersitzung von verschiedenen verschiedenen Banken verwalten .... – Thihara

+0

@ Eduard, In diesem Fall Es kann keine Sitzungsreplikation sein, da IRCTC und CITIBANK eine andere Organisation sind, so dass sie keine Sitzungsreplikation haben müssen. –

+0

Die obigen 2 Kommentare sind richtig. Aber immer noch danke für Ihr Replikationskonzept. Ich habe daraus gelernt. –

0

Wie können Sie sagen, dass die Benutzersitzung auf beiden Servern gleich ist?

Ich gehe davon aus, dass Sie über die Optionen des Zahlungsgateways und deren Funktionalität sprechen.

Im Allgemeinen senden Sie einen Web-Service-Anruf und leiten den Benutzer an eine URL des Zahlungs-Gateways um, die sich mit den Transaktionsdetails befasst.

Dann erhält die ursprüngliche Bank die Web-Service-Antwort des Zahlungsgateways mit den Transaktionsdetails.

Dieser Fluss variiert jedoch leicht an verschiedenen Gateways. Das Wichtigste ist jedoch, dass sie keine Sitzung für den Benutzer auf ihren Servern halten, wenn sie überhaupt eine Sitzung führen, dann wird dies für die IRCTC-Website sein.

1

Es gibt KEINE Sitzung geteilt zwischen IRCTC und CITI Bank hier. IRCTC stellt eine Anfrage an die CITI-Bank, indem sie das Formular auf der CITI-Bank-URL einreicht und der Zahlungsbetrag und andere Dinge werden als versteckter Parameter in dieser Form gesendet (natürlich durch einen sicheren Mechanismus, wie bei einigen Hashcodes der gesendeten Werte).

Nachdem die Zahlung erfolgreich durchgeführt wurde, sendet die citi bank ein Formular an die URL des IRCTC (die vom IRCTC angegebene URL). mit den Details (wie Erfolg/Fehler) in versteckten Parameter. IRCTC verarbeitet das und zeigt den Erfolgs-/Fehlerbildschirm an.

Auch die Sitzung in Ihrer übergeordneten Anwendung wird in diesem Fall nie beendet. Die Sitzung konnte durch eine der folgenden Arten enden:

1. Session time out 
2. Logout 
3. Application destroys the session 

In diesem Fall nicht geschehen und Benutzersitzung ist immer noch da in Browser und Anwendung.

Wenn die Anwendung mehr als einen Server hat, wird die Sitzung zwischen ihnen mithilfe des Sitzungsreplikationsmechanismus geteilt, den die Server bereitstellen.

Auch der Webserver den gleichen Server anfordern (für eine Sitzungs-ID) und nur einen anderen Anwendungsserver anruft, wenn der ursprüngliche Server nicht erreichbar ist, in diesem Fall kommt die Sitzungsreplikation zur Rettung des Benutzers.

+0

Unter der Annahme, IRCTC mit Struts (Jsp/Servlets), die Federbein Komponente übernimmt die Verantwortung, die Details des IRCTC an Citi Bank zu senden und erhalten zurück von CITI Bank zu IRCTC. Ist es möglich, Requestdispacter.sendRedirect() oder etwas anderes zu verwenden? –

+0

@sikorski dieser Kommentar ist kein Update! Es ist eine Frage. –

+0

mein Fehler ... ich habe es falsch gelesen. – Sikorski

0

Es gibt etwas Aufruf Sitzungsmigration, wo ein LBS (Load Balancing Server) verfügbar ist, um mehrere Anfrage und Kontakt mit mehreren Anwendungsserver zu bekommen.Und manchmal eine Benutzeranforderung kann für mehrere Server freigeben, wo mehrere Benutzer für die gleiche Sache anfordern. Offensichtlich muss der Server, auf den die Anfrage gehen soll, frei sein. dann nimmt LBS die erste Anfrage an und leitet sie an einen freien Server weiter, wo das Sitzungs-Obj für diesen Benutzer erstellt hat. Jetzt wird die zweite Anfrage an den 2. Server weitergeleitet. Aber der 2. Server möchte die 1. Benutzersitzung Obj teilen, so dass wir Zeit von Sitzung 1 zu Sitzung 2 migrieren müssen. Es gibt zwei Ereignisse, die passiviertes Ereignis und aktiviertes Ereignis auftreten werden. wir müssen einen Listener HttpSessionActivationListener verwenden und müssen void sessionWillPassivate() und void sessionDidActivate() implementieren

Verwandte Themen