Wie wird die Webanwendungsanforderung von mehreren Servern gehandhabt, indem dieselbe Benutzersitzung beibehalten wird?

8

Sie möchten wissen, wie eine Anfrage von mehreren Servern verarbeitet wird, die dieselbe Benutzersitzung führen.

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, werde ich von der Website der CITI Bank OHNE ENDE DER BENUTZERSITZUNG zur IRCTC-Website zurückwechseln, dh wenn ich nach Abschluss der Transaktion von der CITI-Bank-URL zur IRCTC gewechselt habe, ist die Benutzersitzung im eingeloggten Zustand gepflegt.

Ich würde gerne wissen, wie das funktioniert.

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

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

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

Danke,

  • Anand
anand kumar 26.04.2013, 06:10
quelle

4 Antworten

3

Es gibt eine sogenannte Sitzungsreplikation . Es wird in Clustern verwendet, damit alle Clusterknoten dieselben Sitzungsinformationen verwenden. Lesen Sie die verlinkte Site oder andere Ressourcen zur Funktionsweise der Sitzungsreplikation, wenn Sie neugierig sind.

Aber die Systeme müssen 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. Du bist immer noch angemeldet.

Wahrscheinlich übergibt die IRCTC-Site einige Informationen an die CITI-Bankseite, die CITI benötigt, um die Anfrage zusammen mit einem Token zu bearbeiten (im einfachsten Fall nur eine Nummer). 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 dort hat eine aktualisierte Sitzung und kann Ihnen die nächste Seite Ihres Bestellvorgangs präsentieren.

    
Eduard Wirch 26.04.2013 06:20
quelle
1

Es gibt KEINE Sitzung geteilt zwischen IRCTC und CITI Bank hier. IRCTC stellt eine Anfrage an die CITI Bank, indem sie das Formular über die 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 IRCTC URL (die vom IRCTC angegebene URL). mit den Details (wie Erfolg / Fehler) in versteckten Parameter. IRCTC verarbeitet dies und zeigt den Erfolg / Fehler-Bildschirm.

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

%Vor%

In diesem Fall ist nichts passiert und die Benutzersitzung ist immer noch in Browser und Anwendung vorhanden.

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

Außerdem fordert der Webserver den gleichen Server (für eine Sitzungs-ID) an und ruft nur einen anderen Anwendungsserver auf, wenn der ursprüngliche Server nicht erreichbar ist. In diesem Fall kommt die Sitzungsreplikation zur Rettung des Benutzers.

    
Ankit 26.04.2013 06:43
quelle
0

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

Ich gehe davon aus, dass Sie über die Zahlungsgatewayoptionen und ihre 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 Webservice-Antwort des Zahlungsgateways mit den Transaktionsdetails.

Dieser Ablauf variiert jedoch bei verschiedenen Gateways geringfügig. 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 gelten.

    
Thihara 26.04.2013 06:23
quelle
0

Es gibt etwas, das Sitzungsmigration genannt wird, wobei ein LBS (Load Balancing Server) verfügbar ist, um mehrere Anfragen und Kontakte mit mehreren Anwendungsservern zu bekommen. Und manchmal kann eine Benutzeranfrage für mehrere Server freigegeben sein, wobei mehrere Benutzer dieselbe 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

    
Somrita Chatterjee 28.08.2015 05:41
quelle

Tags und Links