Das Sitzungsattribut ist nach dem Aufruf einer clientseitigen Umleitung verloren gegangen

8

Zuvor verwendet das Servlet response.sendRedirect("pages/my_page.jsp?foo=bar"); ohne Probleme. Sitzungsattribute können auf den nachfolgenden Seiten abgerufen werden, an die sie weitergeleitet werden.

Momentan ändere ich den Weg, um Anfragen zu senden. Ursprünglich verwendet das Javascript myForm.submit(); , aber ich habe es jetzt in jQuery.ajax("my_page.jsp?foo=bar", {...}); geändert. Dann enthält das Servlet eine URL in der JSON-Antwort anstelle von response.sendRedirect() , und in der Funktion success verwende ich window.location.replace(url); , um zur neuen Seite zu navigieren. Die gespeicherten Sitzungsattribute können jedoch nicht auf nachfolgenden Seiten abgerufen werden.

Ich habe die Sitzungs-IDs verglichen, indem ich <%= session.getId() %> in meine JSP-Seiten eingefügt habe. Sie sind gleich. Das Problem hier ist session.getAttribute("myAttribute_1") gibt null auf der Seite zurück, an die umgeleitet wurde.

Ich bin mir nicht sicher, ob das wichtig ist, aber ich mache diese Aufgabe tatsächlich mit mehr als 1 JSP-Seiten:

%Vor%

Wie bekomme ich in diesem Fall die gespeicherten Sitzungsattribute in C.jsp ?

Bearbeiten

Unten ist das Code-Snippet, das ich verwende, um das Sitzungsattribut zu speichern.

%Vor%

Unten ist das Code-Snippet zum Umleiten.

%Vor%

Ergebnis

Ich habe zurück zu response.sendRedirect("pages/my_page.jsp?foo=bar") in meinem Servlet verwendet.

Auf der Client-Seite wird jQuery.ajax() entfernt und die Funktion sendFormData() wird wie folgt aktualisiert.

%Vor%

Immer wenn ich ein Formular abschicken möchte, wird ein click Event-Handler angehängt. Es wird sendFormData(myOriginalForm); anstelle von myOriginalForm.submit(); aufgerufen, da ich die zu sendenden Daten anpassen muss.

Nur mit diesen einfachen Änderungen funktioniert alles wieder.

Dennoch suche ich nach einer Erklärung für dieses seltsame Verhalten.

    
Seraph Cheng 12.10.2015, 07:56
quelle

2 Antworten

2

Auf der Serverseite

HTTP-Anfragen sind zustandslos und die Sitzungen werden auf verschiedene Arten wie

auf HTTP gelegt
  • URL-Neuschreiben (z. B. startet der Server eine neue Sitzung und gibt seine ID an den Client zurück, dann hängt der Client die Sitzungs-ID an alle nachfolgenden Anfragen an http://host:port/path;session_id=12345 )
  • Cookies (z. B. wenn der Server zur Sitzungsgenerierung mit einer Cookie-Codierungssitzungs-ID antwortet, und auf der Serverseite erwarten Sie, dass dieser Cookie jede Anfrage mit der vorhandenen Sitzung korreliert).

Es liegt in der Verantwortung des Kunden sicherzustellen, dass er mit den vom Server erwarteten Mitteln an der Sitzung teilnimmt. Wenn der Server mithilfe der Java-Servlet-API implementiert wird, wird entweder der Cookie jsessionid oder der Abfrageparameter mit demselben Namen an die URL angehängt, der die Sitzungs-ID angibt.

Wenn der Client keine Cookies unterstützt, müssen Sie mithilfe der Java Servlet-API umleiten    eine URL, die von HttpServletResponse.encodeRedirectURL(String url) erstellt wurde.

Um von einem Servlet umzuleiten, verwenden Sie HttpServletResponse.sendRedirect(String url); .

Wenn Sie den Server mit Standard für HTTP-Weiterleitungen beantworten, wird Ihr Design vereinfacht. Jquery implementiert diese Standards und berücksichtigt daher HTTP 301 und 302 Antworten vom Server als hier dargestellt , so dass keine Redirect-Logik auf der Client-Seite benötigt werden sollte.

Auf der Clientseite

Ihr Client ist jquery und seine Ajax-Implementierung respektiert und wiederholt die Cookies, die für eine bestimmte Domain festgelegt wurden, wenn eine nachfolgende Anfrage an dieselbe Domain gesendet wird.

Wenn Sie auf eine andere Domain umleiten und jquery mit CORS Sitzungen arbeiten, fügen Sie xhrFields zu Ihrer Anfrage hinzu:

%Vor%

nach diese Antwort

    
diginoise 20.10.2015, 17:11
quelle
2

Haben Sie verschiedene Formen von Javascript-Umleitungen ausprobiert?

Empfohlener Ansatz ist:

%Vor%

Gemäß diesem Artikel ersetzt die Verwendung von window.location.replace die aktuelle Sitzung.

    
Ish 15.10.2015 19:08
quelle

Tags und Links